1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- var dy []int = []int{0, 1, 0, -1}
- var dx []int = []int{1, 0, -1, 0}
- type pair struct {
- _1 int
- _2 int
- }
- func updateMatrix(matrix [][]int) [][]int {
- m := len(matrix)
- if m == 0 {
- return matrix
- }
- n := len(matrix[0])
- if n == 0 {
- return matrix
- }
- updated := make([][]bool, m)
- for i := range updated {
- updated[i] = make([]bool, n)
- }
- queue := make([]pair, 0)
- for y := 0; y < m; y++ {
- for x := 0; x < n; x++ {
- if matrix[y][x] == 0 {
- updated[y][x] = true
- continue
- }
- for i := 0; i < 4; i++ {
- ny, nx := y+dy[i], x+dx[i]
- if 0 <= ny && ny < m && 0 <= nx && nx < n && matrix[ny][nx] == 0 {
- updated[y][x] = true
- queue = append(queue, pair{y, x})
- break
- }
- }
- }
- }
- for len(queue) != 0 {
- p := queue[0]
- queue = queue[1:]
- val := matrix[p._1][p._2]
- for i := 0; i < 4; i++ {
- ny, nx := p._1+dy[i], p._2+dx[i]
- if 0 <= ny && ny < m && 0 <= nx && nx < n && !updated[ny][nx] {
- updated[ny][nx] = true
- queue = append(queue, pair{ny, nx})
- matrix[ny][nx] = val + 1
- }
- }
- }
- return matrix
- }
|