73.M 矩阵置零
Problem: 73. 矩阵置零
思路
先用两个数组row
和col
分别用于存储某一行或者某一类是否有0,然后遍历这两个数组,把对应的行或列标记为0
注意点:需要把row
和col
设置非0的初始值。
Code
func setZeroes(matrix [][]int) {
row := make([]int, len(matrix))
for i := 0; i < len(row); i++ {
row[i] = 1
}
col := make([]int, len(matrix[0]))
for i := 0; i < len(col); i++ {
col[i] = 1
}
for i := 0; i < len(matrix); i++ {
for j := 0; j < len(matrix[0]); j++ {
if matrix[i][j] == 0 {
row[i] = 0
col[j] = 0
}
}
}
for i := 0; i < len(row); i++ {
if row[i] == 0 {
for j := 0; j < len(col); j++ {
matrix[i][j] = 0
}
}
}
for i := 0; i < len(col); i++ {
if col[i] == 0 {
for j := 0; j < len(row); j++ {
matrix[j][i] = 0
}
}
}
}
为了避免赋初始值的操作,可以把row和col改为布尔数组。代码如下:
func setZeroes(matrix [][]int) {
row := make([]bool, len(matrix))
col := make([]bool, len(matrix[0]))
for i, nums := range matrix {
for j, num := range nums {
if num == 0 {
row[i] = true
col[j] = true
}
}
}
for i, nums := range matrix {
for j := range nums {
if row[i] || col[j] {
matrix[i][j] = 0
}
}
}
}
Last updated
Was this helpful?