辅助空间
- 行map
- 列map
遍历一遍把两个map生成好
然后再去修改
统计与修改是分离的
2个变量
- 变量1 第0行是否是0
- 变量2 第0列是否是0

遍历第0行和第0列,更新这两个变量,那么我们就知道了第0行和第0列要不要全变0了
然后我们再把第0行和第0列当成两个map(行map, 列map),用来记录信息,
举个例子
然后遍历剩下的数

遍历完后就可以修改了
public void setZeroes(int[][] matrix) {boolean row0Zero = false;boolean col0Zero = false;int i = 0;int j = 0;for (i = 0; i < matrix[0].length; i++) {if (matrix[0][i] == 0) {row0Zero = true;break;}}for (i = 0; i < matrix.length; i++) {if (matrix[i][0] == 0) {col0Zero = true;break;}}for (i = 1; i < matrix.length; i++) {for (j = 1; j < matrix[0].length; j++) {if (matrix[i][j] == 0) {matrix[i][0] = 0;matrix[0][j] = 0;}}}for (i = 1; i < matrix.length; i++) {for (j = 1; j < matrix[0].length; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}if (row0Zero) {for (i = 0; i < matrix[0].length; i++) {matrix[0][i] = 0;}}if (col0Zero) {for (i = 0; i < matrix.length; i++) {matrix[i][0] = 0;}}}
1个变量 (面试吹逼用)
用一个变量col_0 单独记录第0列的值要不要全变0,
然后左上角的值含义归属于行,
- 也就是它仅仅代表第0行要不要全变0, 而不代表列

改的时候从下往上遍历,因为第0行是指导意义,放在最后改

第0列也是最后改的
public static void setZeroes2(int[][] matrix) {boolean col0 = false;int i = 0;int j = 0;for (i = 0; i < matrix.length; i++) {for (j = 0; j < matrix[0].length; j++) {if (matrix[i][j] == 0) {matrix[i][0] = 0;if (j == 0) {col0 = true;} else {matrix[0][j] = 0;}}}}for (i = matrix.length - 1; i >= 0; i--) {for (j = 1; j < matrix[0].length; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}if (col0) {for (i = 0; i < matrix.length; i++) {matrix[i][0] = 0;}}}
