给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ]
class Solution {
public void setZeroes(int[][] matrix) {
//用来记录包含0的行数
List<Integer> rows=new ArrayList<>();
//用来记录包含0的列数
List<Integer> cols=new ArrayList<>();
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[0].length;j++){
if(matrix[i][j]==0){
rows.add(i);
cols.add(j);
}
}
}
for(Integer elem:rows){
for(int i=0;i<matrix[0].length;i++){
matrix[elem][i]=0;
}
}
for(Integer elem:cols){
for(int i=0;i<matrix.length;i++){
matrix[i][elem]=0;
}
}
return;
}
}
class Solution {
public void setZeroes(int[][] matrix) {
if(matrix== null || matrix.length==0){
return;
}
boolean cowFlag=false;
boolean rolFlag=false;
//首先查看第一行、第一列是否包含零,当然这一步是为了判断最后需不需要把首行首列全部置零
//这步必须先做,否则后面置0操作完成后就分不清是原来就有0还是后面改的了
for(int i=0;i<matrix[0].length;i++){
if(matrix[0][i]==0){
cowFlag=true;
break;
}
}
for(int i=0;i<matrix.length;i++){
if(matrix[i][0]==0){
rolFlag=true;
break;
}
}
//查找零
for(int i=1;i<matrix.length;i++){
for(int j=1;j<matrix[0].length;j++){
if(matrix[i][j]==0){
matrix[0][j]=0;
matrix[i][0]=0;
}
}
}
//置零操作
for(int i=1;i<matrix.length;i++){
for(int j=1;j<matrix[0].length;j++){
if(matrix[i][0]== 0 || matrix[0][j]==0){
matrix[i][j]=0;
}
}
}
//对首行进行操作
if(cowFlag){
for(int i=0;i<matrix[0].length;i++){
matrix[0][i]=0;
}
}
//对首列进行操作
if(rolFlag){
for(int i=0;i<matrix.length;i++){
matrix[i][0]=0;
}
}
}
}