矩阵置零
问题描述
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
样例输入
cpp
matrix = [[1,1,1],[1,0,1],[1,1,1]]
样例输出
cpp
[[1,0,1],[0,0,0],[1,0,1]]
评测用例规模与约定
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-2^31 <= matrix[i][j] <= 2^31 - 1
解析
不能使用额外空间只能在原数组上操作,我们可以把数组第一行第一列当作标记,看行列是否有0,遍历一遍标记。但第一行第一列怎么处理,可以先用boolen记录一下其他都修改完再处理,同时第一列是否有0用m[0][0]就能表示。
参考程序
java
class Solution {
public void setZeroes(int[][] matrix) {
int m=matrix.length;
int n=matrix[0].length;
boolean first=false;
for(int j=0;j<n;j++){
if(matrix[0][j]==0){first=true;break;}
}
for(int i=1;i<m;i++){
for(int j=0;j<n;j++){
if(matrix[i][j]==0){
matrix[i][0]=matrix[0][j]=0;
}
}
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(matrix[i][0]==0||matrix[0][j]==0){
matrix[i][j]=0;
}
}
}
if(matrix[0][0]==0){
for(int[] row:matrix){
row[0]=0;
}
}
if(first){
Arrays.fill(matrix[0],0);
}
}
}
难度等级
⭐️⭐️⭐️⭐️(1~10星)
以个人刷题整理为目的,如若侵权,请联系删除~