73.M 矩阵置零

Problem: 73. 矩阵置零

思路

先用两个数组rowcol分别用于存储某一行或者某一类是否有0,然后遍历这两个数组,把对应的行或列标记为0

注意点:需要把rowcol设置非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?