小黑享受思考心流: 73. 矩阵置零
小黑代码
class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""items = []m = len(matrix)n = len(matrix[0])for i in range(m):for j in range(n):if not matrix[i][j]:items.append((i, j))for item in items:x = item[0]y = item[1]for i in range(n):matrix[x][i] = 0for j in range(m):matrix[j][y] = 0return matrix
标记变量
class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""# 行和列数m = len(matrix)n = len(matrix[0])# 判断第一行和第一列是否有0has_zero_row = Falsehas_zero_column = Falsefor i in range(m):if not matrix[i][0]:has_zero_row = Truebreakfor i in range(n):if not matrix[0][i]:has_zero_column = Truebreak# 开始通过第一行和第一列记录该行是否置零for i in range(1, m):for j in range(1, n):if not matrix[i][j]:matrix[i][0] = 0matrix[0][j] = 0# 开始进行置零for i in range(1, m):if not matrix[i][0]:for t in range(1, n):matrix[i][t] = 0for i in range(1,n):if not matrix[0][i]:for t in range(1,m):matrix[t][i] = 0# 判断第一行和第一列是否需要置零if has_zero_row:for i in range(m):matrix[i][0] = 0if has_zero_column:for i in range(n):matrix[0][i] = 0return matrix
C#练习
public class Solution {public void SetZeroes(int[][] matrix) {int m = matrix.Length;int n = matrix[0].Length;// 标记变量bool rowZero = false;bool columnZero = false;// 计算标记变量for(int i = 0; i < m; i++){if(matrix[i][0]==0){rowZero = true;break;}}for(int j = 0; j < n; j++){if(matrix[0][j]==0){columnZero = true;break;}}// 开始计算为零的行列for(int i = 1; i < m; i++){for(int j = 1; j < n; j++){if(matrix[i][j]==0){matrix[i][0] = 0;matrix[0][j] = 0;}}}// 开始置零for(int i = 1; i < m; i++){if(matrix[i][0]==0){for(int j = 1; j < n; j++){matrix[i][j] = 0;}}}for(int j = 1; j < n; j++){if(matrix[0][j]==0){for(int i = 1; i < m; i++){matrix[i][j] = 0;}}}// 判断第一行和第一列是否需要置零if(rowZero){for(int i = 0; i < m; i++){matrix[i][0] = 0;}}if(columnZero){for(int j = 0; j < n; j++){matrix[0][j] = 0;}}}
}