01矩阵
题目链接
题目解法
这题记录所有0的点,并且把1的点先标记为最大的值,然后用bfs 搜索最近的一点靠近0的步数找到最小值
go解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| type point struct { x, y int }
func updateMatrix(matrix [][]int) [][]int { m, n, nums := len(matrix), len(matrix[0]), 0
var p []point for i := 0; i < m; i++ { for j := 0; j < n; j++ { if matrix[i][j] == 0 { p = append(p, point{i, j}) nums++ } else { matrix[i][j] = m * n } } } start := 0 for { if nums <= start { break } dx := []int{1, 0, -1, 0} dy := []int{0, 1, 0, -1} for i := 0; i < 4; i++ { tx := p[start].x + dx[i] ty := p[start].y + dy[i] if tx < 0 || ty < 0 || tx >= m || ty >= n { continue } if matrix[tx][ty] > matrix[p[start].x][p[start].y]+1 { matrix[tx][ty] = matrix[p[start].x][p[start].y] + 1 p = append(p, point{tx, ty}) nums++ } } start++ } return matrix }
|