一、题目:73. 矩阵置零
二、题目解析:
解题步骤:注意题目要求原地算法–>利用矩阵的第一行和第一列记录矩阵需要置0的行和列,只要把0所在行和列的第一个位置置为0,
然后再根据第一行和第一列0的位置,对矩阵置0即可
- 定义两个boolean变量,遍历矩阵中第一行和第一列是否存在0,存在则置为true
- 从二维数组中的第一行和第一列开始遍历是否存在0,存在则将当前元素所在行的第一个元素和所在列的第一个元素置为 0
- 从二维数组中的第一行和第一列开始遍历,只要当前元素对应的第一行或第一列有一个元素为0,则将当前元素更新为 0
- 最后根据两个boolean变量,判断是否需要将第一行和第一列置为0,需要则将该行或列置0即可
图示:
三、代码如下:
public int[][] setZero(int[][] matrix){int m = matrix.length;int n = matrix[0].length;boolean rowZero = false;boolean colZero = false;for(int i = 0;i < m; i++){//判断第一列是否存在0if(matrix[i][0] == 0){colZero = true;}}for (int j = 0 ;j < n; j++){//判断第一行是否存在0if(matrix[0][j] == 0){rowZero = true;}}for(int i = 1;ifor(int j = 1; jif(matrix[i][j] == 0){//如果当前元素等于 0,则将当前元素所在行的第一个元素和所在列的第一个元素置为 0matrix[i][0] = matrix[0][j] = 0;}}}for(int i = 1;ifor(int j = 1; j//只要当前元素对应的第一行或第一列有一个元素为0,则将当前元素更新为 0if(matrix[i][0] == 0 || matrix[0][j] ==0){matrix[i][j] = 0;}}}if(rowZero){for (int i = 0; i < n; i++) {matrix[0][i] = 0;}}if(colZero){for (int i = 0;i < m;i++){matrix[i][0] = 0;}}return matrix;}
四、测试
五、结束
上一篇:Ubuntu中安装Qt