LeetCode73. Set Matrix Zeroes
这题肯定要用辅助空间,因为是遇到0的则将该行该列都置为0,但是无法判断哪个是开始的0,哪个是被重置的0,导致最后整个数组都变成0。
而辅助数组为O(mn)则为最暴力的解法。
可以优化至O(m+n),即保存哪行哪列需要被置0。
那么可以被优化到空间复杂度为常数嘛。
可以的。
我们可以用第0行和第0列来记录该列是否要被变为0,另设两个boolean来记录第0行和第0列本身需不需要被变为0即可。
遍历每个元素(i,j),如果它为0,则其对应的(i,0)(0,j)都设为0。由于(i,0)(0,j)的遍历都在(i,j)之前,所以设0也不会影响结果。
class Solution { public void setZeroes(int[][] matrix) { if(matrix==null||matrix.length<1||matrix[0].length<1) return; int m=matrix.length,n=matrix[0].length; boolean firstRow0=false,firstCol0=false; for(int i=0;i<m;i++) for(int j=0;j<n;j++){ if(matrix[i][j]==0){ if(i==0) firstCol0=true; if(j==0) firstRow0=true; matrix[0][j]=0; matrix[i][0]=0; } } for(int i=1;i<m;i++) for(int j=1;j<n;j++){ if(matrix[0][j]==0||matrix[i][0]==0) matrix[i][j]=0; } if(firstRow0){ for(int i=0;i<m;i++) matrix[i][0]=0; } if(firstCol0){ for(int i=0;i<n;i++){ matrix[0][i]=0; } } } }
Runtime: 0 ms, faster than 100.00% of Java online submissions for Set Matrix Zeroes.
Memory Usage: 42.1 MB, less than 86.07% of Java online submissions for Set Matrix Zeroes.

浙公网安备 33010602011771号