73. Set Matrix Zeroes

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

这道题和之前的Game of Live有些不一样,区别在于,之前那道题目只有两种状态,即矩阵只有0和1两种,并且只和与它相临的八个点发生关系。而这道题矩阵里面的数字是随机的,因此不可以用位操作来做了。看了discussion,可以将矩阵某点为0的点的行列的起点都设为0,这个时候就只要处理行为0,列为0还有特殊点(0,0)的情况就行了,行为0也可以这么设置,而列为0的时候需要设一个变量来表示该列是否需要全为0.本题关键在于遍历的顺序,设置为0的时候可以用正常顺序,而行列赋值为0的时候就需要从后往前了,因为这样一次遍历就可以全部遍历到,而如果是正常顺序就是还要考虑列为0的情况,列为0的情况必须最后考虑,代码如下:

 1 public class Solution {
 2     public void setZeroes(int[][] matrix) {
 3         int col0 = 1;
 4         int m = matrix.length;
 5         int n =matrix[0].length;
 6         for(int i=0;i<m;i++){
 7             if(matrix[i][0]==0) col0 = 0;
 8             for(int j=1;j<n;j++){
 9                 if(matrix[i][j]==0){
10                     matrix[i][0] = 0;
11                     matrix[0][j] = 0;
12                 }
13             }
14         }
15         for(int i=m-1;i>=0;i--){
16             for(int j=n-1;j>0;j--){
17                 if(matrix[i][0]==0||matrix[0][j]==0) matrix[i][j] = 0;
18             }
19             if(col0==0) matrix[i][0] = 0;
20         }
21     }
22 }
原文地址:https://www.cnblogs.com/codeskiller/p/6384822.html