leetcode 第73题 矩阵转置
程序员文章站
2022-03-15 20:33:44
...
今天和昨天和明天搬家,可能不太有时间,今天抽空写道题。
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
主要要求是原地转置,所以比较难一点。
class Solution {
public void setZeroes(int[][] matrix) {
if(matrix.length == 0){
return ;
}
int m = matrix.length ;
int n = matrix[0].length ;
boolean row0 = false ;
boolean col0 = false ;
for(int i = 0 ; i < m ; i ++){//把带0的每行每列的行首列首置为0
for(int j = 0 ; j < n ; j ++){
if(matrix[i][j]==0){
if(i == 0) col0 = true ;//如果第一行某个数字为0,会被掩盖掉,所以提前记录一下,首行是否有0,如果有,后面把整行设为0
if(j == 0) row0 = true ;//所以设置了这两个参数
matrix[0][j] = matrix[i][0] = 0 ;
}
}
}
for(int i = 1 ; i < m ; i ++){
for(int j = 1 ; j < n ; j ++){
if(matrix[0][j] == 0 || matrix[i][0] == 0){
matrix[i][j] = 0 ;
}
}
}
if(col0 == true){
for(int i = 0 ; i < n ; i ++){
matrix[0][i] = 0 ;
}
}
if(row0 == true){
for(int j = 0 ; j < m ; j++){
matrix[j][0] = 0 ;
}
}
}
}
一个关键的问题就是,首行和首列的问题,要提前设置好 col0和row0,如果有0,就把它们设为0
上一篇: 单链表的增删改查(带头节点)
下一篇: as event