类别:数组 二维数组变换
题目:
想法:
按照题目要求,仅用两个标志位记录第0行/列是否有0,再用第0行/列记录矩阵各行/列是否有0
代码:
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length; //行数
int n = matrix[0].length; // 列数
//用两个标志位记录一下第0行/列是否有0
int flagR0=0;
int flagC0=0;
int i,j;
//遍历第0列 看有无0
for(i=0;i<m;i++){
if(matrix[i][0]==0){
flagC0=1;
}
}
//遍历第0行 看有无0
for(j=0;j<n;j++){
if(matrix[0][j]==0){
flagR0=1;
}
}
//遍历矩阵 把第i行/第j列有0的情况用 第0行/列记录标志
for(i=1;i<m;i++){
for(j=1;j<n;j++){
if(matrix[i][j]==0){
matrix[i][0]=0;
matrix[0][j]=0;
}
}
}
//遍历第0列 看有无0
for(i=1;i<m;i++){
if(matrix[i][0]==0){
for(j=1;j<n;j++){
matrix[i][j]=0;
}
}
}
//遍历第0行 看有无0
for(j=1;j<n;j++){
if(matrix[0][j]==0){
for(i=1;i<m;i++){
matrix[i][j]=0;
}
}
}
//若标志位0列初始有0 则将0列全置0
if(flagC0==1){
for(i=0;i<m;i++){
matrix[i][0]=0;
}
}
//若标志位0行初始有0 则将0行全置0
if(flagR0==1){
for(j=0;j<n;j++){
matrix[0][j]=0;
}
}
}
}
结果: