原题链接:73. Set Matrix Zeroes
【思路-Java】T=O(n)|M=O(n)
建立一个大小为 n 的数组,用于记录第 j 列是否出现0
【思路2-Python】T=O(n)|M=O(1) 题目建议最好使用常数空间,那么我们先扫描第一行,记录下第一行是否含有0。接着从第二行开始扫描,当扫描到0时,就将“该列出现0”的信息记录到第一行中,而不是新生成一个大小为 n 的boolean数组 :
public class Solution {
public void setZeroes(int[][] matrix) {
boolean[] flag = new boolean[matrix[0].length];
for(int i =0; i<matrix.length; i++) {
boolean contains0 = false;
for (int j =0; j < matrix[0].length; j++) {
if(matrix[i][j] == 0) {
contains0 = true;
flag[j] = true;
}
}
if(contains0)
for(int j=0; j<matrix[0].length; j++) matrix[i][j] = 0;
}
for(int j = 0; j < matrix[0].length; j++)
if(flag[j])
for(int i =0; i<matrix.length; i++) matrix[i][j] = 0;
}
}
157 / 157 test cases passed. Runtime: 2 ms Your runtime beats 23.02% of javasubmissions.
【思路2-Python】T=O(n)|M=O(1) 题目建议最好使用常数空间,那么我们先扫描第一行,记录下第一行是否含有0。接着从第二行开始扫描,当扫描到0时,就将“该列出现0”的信息记录到第一行中,而不是新生成一个大小为 n 的boolean数组 :
class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
firstRowContains0 = False
for row in matrix[0] :
if row == 0 :
firstRowContains0 = True
break
for i in range(1,len(matrix)) :
thisRowContains0 = False
for j in range(0, len(matrix[0])) :
if matrix[i][j] == 0 :
thisRowContains0 = True
matrix[0][j] = 0
if thisRowContains0 :
for j in range(0, len(matrix[0])) :
matrix[i][j] = 0
for j in range(len(matrix[0])) :
if matrix[0][j] == 0 :
for i in range(len(matrix)) :
matrix[i][j] = 0
if firstRowContains0 :
for j in range(len(matrix[0])) :
matrix[0][j] = 0
157 / 157 test cases passed. Runtime: 176 ms Your runtime beats 84.33% of pythonsubmissions.