73. Set Matrix Zeroes

在原地置0:

1.检查第一行和第一列是否有0,有的话用boolean记下来,因为一会需要使用这个空间来记录是否行列里有0

2.检查1到最后行&1到最后一列是否有0,记录在第一行&列中

3.检查1到最后行&1到最后列如果行or列有0,那么置零

4.利用开始的flag,对第一行&第一列置零

 

 1     public void setZeroes(int[][] matrix) {
 2         if(matrix == null || matrix.length == 0 || matrix[0].length == 0) {
 3             return;
 4         }
 5         int row = matrix.length;
 6         int col = matrix[0].length;
 7         boolean rowFlag = false;
 8         boolean colFlag = false;
 9         for(int i = 0; i < row; i++) {
10             if(matrix[i][0] == 0) {
11                 rowFlag = true;
12                 break;
13             }
14         }
15         for(int i = 0; i < col; i++) {
16             if(matrix[0][i] == 0) {
17                 colFlag = true;
18                 break;
19             }
20         }
21         for(int i = 1; i < row; i++) {
22             for(int j = 1; j < col; j++) {
23                 if(matrix[i][j] == 0) {
24                     matrix[i][0] = 0;
25                     matrix[0][j] = 0;
26                 }
27             }
28         }
29         for(int i = 1; i < row; i++) {
30             for(int j = 1; j < col; j++) {
31                 if(matrix[i][0] == 0 || matrix[0][j] == 0) {
32                     matrix[i][j] = 0;
33                 }
34             }
35         }
36         if(rowFlag) {
37             for(int i = 0; i < row; i++) {
38                 matrix[i][0] = 0;
39             }
40         }
41         if(colFlag) {
42             for(int i = 0; i < col; i++) {
43                 matrix[0][i] = 0;
44             }
45         }
46     }

 

posted @ 2016-03-17 04:49  warmland  阅读(257)  评论(0编辑  收藏  举报