พิจารณาว่าเรามีเมทริกซ์ ในเมทริกซ์นั้นถ้าองค์ประกอบหนึ่งเป็น 0 แล้วทำให้ทั้งแถวและคอลัมน์ของเมทริกซ์นั้นเป็น 0 การแปลงจะถูกแทนที่ ดังนั้นหากเมทริกซ์คือ −
1 | 0 | 1 |
1 | 1 | 1 |
1 | 1 | 1 |
จากนั้นผลลัพธ์จะเป็น −
0 | 0 | 0 |
1 | 0 | 1 |
1 | 0 | 1 |
ให้เราดูขั้นตอน -
- n :=จำนวนแถว, m :=จำนวนคอลัมน์, ตั้งค่าสถานะ :=false
- ถ้า mat[0, 0] =0 ให้ตั้งค่าสถานะ :=true
- set row :=false และ col :=false
- สำหรับฉันอยู่ในช่วง 1 ถึง n
- ถ้า mat[i, 0] =0 ให้ตั้งค่า col :=True และทำลายลูป
- สำหรับฉันอยู่ในช่วง 1 ถึง m
- ถ้า mat[0, i] =0 ให้ตั้งค่า row :=True และแตกลูป
- สำหรับฉันอยู่ในช่วง 1 ถึง n
- สำหรับ j ในช่วง 1 ถึง m
- ถ้า mat[i, j] =0 ให้ตั้งค่า mat[i, 0] =0 และ mat[0, j] :=0
- สำหรับ j ในช่วง 1 ถึง m
- สำหรับฉันอยู่ในช่วง 1 ถึง n
- สำหรับ j ในช่วง 1 ถึง m
- ถ้า mat[i, 0] =0 และ mat[0, j] =0 ให้ตั้งค่า mat[i, j] =0
- สำหรับ j ในช่วง 1 ถึง m
- ถ้าตั้งค่าสถานะไว้
- สำหรับ i ในช่วง 0 ถึง n, mat [i, 0] :=0
- สำหรับ i ในช่วง 0 ถึง m, mat[0, i] :=0
- อย่างอื่น
- ถ้าตั้งค่า col แล้วสำหรับ i ในช่วง 0 ถึง n mat [i, 0] :=0
- ถ้ากำหนดแถวไว้ สำหรับ i ในช่วง 0 ถึง m ให้ใช้ mat [0, i] :=0
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution(object): def setZeroes(self, matrix): n = len(matrix) m = len(matrix[0]) flag = False if matrix[0][0] == 0: flag = True row = False column = False for i in range(1,n): if matrix[i][0] == 0: column = True break for i in range(1,m): if matrix[0][i] == 0: row = True break for i in range(1,n): for j in range(1,m): if matrix[i][j] == 0: matrix[0][j] = 0 matrix[i][0]=0 for i in range(1,n): for j in range(1,m): if not matrix[i][0] or not matrix[0][j]: matrix[i][j] = 0 if flag: for i in range(n): matrix[i][0] = 0 for i in range(m): matrix[0][i]=0 else: if column: for i in range(n): matrix[i][0]=0 if row: for i in range(m): matrix[0][i]=0 return matrix ob1 = Solution() print(ob1.setZeroes([[1,0,1],[1,1,1],[1,1,1]]))
อินพุต
[[1,0,1],[1,1,1],[1,1,1]]
ผลลัพธ์
[[0, 0, 0], [1, 0, 1], [1, 0, 1]]