小黑代码
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] = 0
for j in range(m):
matrix[j][y] = 0
return 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])
# 判断第一行和第一列是否有0
has_zero_row = False
has_zero_column = False
for i in range(m):
if not matrix[i][0]:
has_zero_row = True
break
for i in range(n):
if not matrix[0][i]:
has_zero_column = True
break
# 开始通过第一行和第一列记录该行是否置零
for i in range(1, m):
for j in range(1, n):
if not matrix[i][j]:
matrix[i][0] = 0
matrix[0][j] = 0
# 开始进行置零
for i in range(1, m):
if not matrix[i][0]:
for t in range(1, n):
matrix[i][t] = 0
for 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] = 0
if has_zero_column:
for i in range(n):
matrix[0][i] = 0
return 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;
}
}
}
}