暴力模拟
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length, n=matrix[0].length;
int[][] visited = new int[m][n];
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(matrix[i][j]==0&&visited[i][j]!=1) {
///System.out.println("i: "+ i + " j: " + j + " v " + visited[i][j]);
reset(matrix,visited,i,j);
}
}
}
}
void reset(int[][] matrix,int[][] visited, int i, int j){
for(int k=0; k<i; k++){
if(matrix[k][j]==0&&visited[k][j]!=1) visited[k][j] = 0;
else {
matrix[k][j] = 0;
visited[k][j] = 1;
}
}
for(int k=i; k<matrix.length; k++){
if(matrix[k][j]==0&&visited[k][j]!=1) visited[k][j] = 0;
else {
matrix[k][j] = 0;
visited[k][j] = 1;
}
}
for(int k=0; k<j; k++){
if(matrix[i][k]==0&&visited[i][k]!=1) visited[i][k] = 0;
else {
matrix[i][k] = 0;
visited[i][k] = 1;
}
}
for(int k=j; k<matrix[0].length; k++){
if(matrix[i][k]==0&&visited[i][k]!=1) visited[i][k] = 0;
else {
matrix[i][k] = 0;
visited[i][k] = 1;
}
}
}
}
写到一半的时候大概想到了题解的思路,但是没想好怎么写
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
boolean[] row = new boolean[m];
boolean[] col = new boolean[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {
row[i] = col[j] = true;
}
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (row[i] || col[j]) {
matrix[i][j] = 0;
}
}
}
}
}