网站没有内容 能做优化吗,国外做美食视频网站,wordpress 移动分享,北京突发重大消息题目信息
LeetCode地址: . - 力扣#xff08;LeetCode#xff09;
题目理解
矩阵是m*n的#xff0c;如果某个元素(i,j)等于0#xff0c;则将第i行和第j列的所有元素都置零。既然如此#xff0c;我们可以便利每一个元素#xff0c;并记录下哪一行哪一列有零。记录完毕后…题目信息
LeetCode地址: . - 力扣LeetCode
题目理解
矩阵是m*n的如果某个元素(i,j)等于0则将第i行和第j列的所有元素都置零。既然如此我们可以便利每一个元素并记录下哪一行哪一列有零。记录完毕后重新遍历整个矩阵如果其所在行或者所在列存在零则置为零。
所以问题变成了在哪里保存这些信息: 哪一行哪一列有零
我们可以通过一个m长和n长的数组来保存这些信息这会产生O(mn)的额外空间复杂度。
我们也可以把这些信息直接保存在矩阵的第一列和第一行代价是我们要提前遍历第一行和第一列检查其是否存在零如果是最后我们需要把第一列或者第一行的所有元素都置零。
O(mn)额外空间复杂度写法
public void setZeroes(int[][] matrix) {int[] row new int[matrix.length];int[] col new int[matrix[0].length];for (int i 0; imatrix.length; i) {for (int j 0; jmatrix[0].length; j) {if (matrix[i][j] 0) {row[i] 1;col[j] 1; }}}for (int i 0; imatrix.length; i) {for (int j 0; jmatrix[0].length; j) {if (row[i] 1 || col[j] 1) {matrix[i][j] 0;}}}}
O(1)额外空间复杂度写法
public void setZeroes(int[][] matrix) {boolean firstRow false;boolean firstCol false;for (int i 0; imatrix.length; i) {if (matrix[i][0] 0) {firstCol true;break;}}for (int j 0; jmatrix[0].length; j) {if (matrix[0][j] 0) {firstRow true;break;}}for (int i1;i matrix.length; i) {for (int j 1; jmatrix[0].length; j) {if (matrix[i][j] 0) {matrix[i][0] 0;matrix[0][j] 0;}}}for (int i 1; imatrix.length; i) {for (int j 1; jmatrix[0].length; j) {if (matrix[i][0] 0 || matrix[0][j] 0) {matrix[i][j] 0;}}}if (firstCol) {for (int i 0; imatrix.length; i) {matrix[i][0] 0;} }if (firstRow) {for (int i 0; imatrix[0].length; i) {matrix[0][i] 0;} }}