jsp建网站,wordpress 支持svg,电力建设科学技术进步申报网站,吕梁网站设计给定一个 m x n 的矩阵#xff0c;如果一个元素为 0 #xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1#xff1a; 输入#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]]
输出#xff1a;[[1,0,1],[0,0,0],[1,0,1]]使用两个标记变量。 class Sol…给定一个 m x n 的矩阵如果一个元素为 0 则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1 输入matrix [[1,1,1],[1,0,1],[1,1,1]]
输出[[1,0,1],[0,0,0],[1,0,1]]使用两个标记变量。 class Solution {public void setZeroes(int[][] matrix) {
boolean row false;boolean col false;int n matrix[0].length;for(int i 0;i n;i){if(matrix[0][i] 0){row true;}}for(int i 0;i matrix.length;i){if(matrix[i][0] 0){col true;}}for(int i matrix.length - 1;i 0 ;i--){for(int j 0;j n;j){if(matrix[i][j] 0){matrix[i][0] 0;matrix[0][j] 0;}}}for(int i matrix.length - 1;i 0 ;i--){if(matrix[i][0] 0){for(int j 1;j n;j){matrix[i][j] 0;}}}for(int i 1;i n;i){if(matrix[0][i] 0){for(int j 1;j matrix.length;j){matrix[j][i] 0;}}}if(row){for(int i 0;i n;i){matrix[0][i] 0;}}if(col){for(int i 0;i matrix.length;i){matrix[i][0] 0;}}for(int i 0;i matrix.length;i){for(int j 0;j n;j){System.out.print(matrix[i][j] );}System.out.print(\n);}}
}
row和col用于标记是否需要将第一行和第一列设置为0。然后通过遍历第一行和第一列的元素判断是否存在0如果存在则将对应的布尔变量设置为true。
接下来使用两个嵌套的for循环遍历矩阵中的每个元素。如果某个元素为0则将该元素所在的行的第一个元素和所在列的第一个元素都设置为0。这样做的目的是在不直接修改原始矩阵的情况下记录下哪些行和列需要被设置为0。
然后再次使用两个嵌套的for循环遍历矩阵中的每个元素。如果某个元素所在的行的第一个元素或所在列的第一个元素为0则将该元素设置为0。这样就能将所有包含0的行和列都设置为0。
最后根据之前记录的row和col的值如果需要将第一行或第一列设置为0则进行相应的操作。 代码优化后 class Solution {public void setZeroes(int[][] matrix) {
boolean row false;boolean col false;int n matrix[0].length;for(int i 0;i n;i){if(matrix[0][i] 0){row true;}}for(int i 0;i matrix.length;i){if(matrix[i][0] 0){col true;}}for(int i matrix.length - 1;i 0 ;i--){for(int j 0;j n;j){if(matrix[i][j] 0){matrix[i][0] 0;matrix[0][j] 0;}}}for(int i matrix.length - 1;i 0 ;i--){if(matrix[i][0] 0){for(int j 1;j n;j){matrix[i][j] 0;}}}for(int i 1;i n;i){if(matrix[0][i] 0){for(int j 1;j matrix.length;j){matrix[j][i] 0;}}}if(row){for(int i 0;i n;i){matrix[0][i] 0;}}if(col){for(int i 0;i matrix.length;i){matrix[i][0] 0;}}}
}