|
@@ -0,0 +1,53 @@
|
|
|
+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
|
|
|
+}
|