73. 矩阵置零
- 原题链接:
- 完成情况:
- 解题思路:
- 解法一:构造一个同等规模的二维数组,即所谓的m*n
- 解法二: int row[] = new int[m]; int col[] = new int[n];
- 解法三:常数量级
- 参考代码:
原题链接:
73. 矩阵置零
https://leetcode.cn/problems/set-matrix-zeroes/
完成情况:
解题思路:
解法一:构造一个同等规模的二维数组,即所谓的m*n
解法二: int row[] = new int[m]; int col[] = new int[n];
所谓m+n,则是你可以构建一个:
int row[] = new int[m];
int col[] = new int[n];
来记录哪几行,哪几列需要被设置成0
解法三:常数量级
即,你在二维数组中找到一个等于0的位置,用两个参数,row/col来记录他的位置,然后就和上面的解法二一样,只不过这次是将所有统计结果都记录到row/col这两个看似的一维数组中。
参考代码:
package 中等题;
public class __73矩阵置零__普通版 {
/**
*
* @param matrix
*/
public void setZeroes(int[][] matrix) {
int helper[][] = matrix;
for(int i=0;i< matrix.length;i++){
for (int j=0;j< matrix[0].length;j++){
if (matrix[i][j] == 0){
//设置的是辅助数组
SetZero(helper,i,j);
break;
}
}
}
for(int i=0;i< matrix.length;i++) {
for (int j = 0; j < matrix[0].length; j++) {
matrix[i][j] = helper[i][j];
}
}
}
/**
*
* @param helper
* @param m
* @param n
*/
private void SetZero(int helper[][], int m, int n) {
for (int i=0;i< helper.length;i++){
helper[i][n] = 0;
}
for (int i=0;i< helper.length;i++){
helper[m][i]= 0;
}
}
}