update: leetcode 1034 solution && readme

This commit is contained in:
tphyhFighting
2021-12-09 12:53:23 +08:00
parent bda9f48034
commit 94c703c2d5
2 changed files with 52 additions and 58 deletions

View File

@ -5,49 +5,46 @@ type point struct {
y int
}
var (
borders []point
type gridInfo struct {
m int
n int
vis [][]bool
dirs []point
q []point
grid [][]int
originalColor int
)
}
func colorBorder(grid [][]int, row, col, color int) [][]int {
m, n = len(grid), len(grid[0])
vis = make([][]bool, m)
m, n := len(grid), len(grid[0])
dirs := []point{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
vis := make([][]bool, m)
for i := range vis {
vis[i] = make([]bool, n)
}
dirs = []point{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
originalColor = grid[row][col]
borders = []point{}
q = []point{{row, col}}
bfs(q, grid)
var borders []point
gInfo := gridInfo{
m: m,
n: n,
grid: grid,
originalColor: grid[row][col],
}
dfs(row, col, gInfo, dirs, vis, &borders)
for _, p := range borders {
grid[p.x][p.y] = color
}
return grid
}
func bfs(q []point, grid [][]int) {
for len(q) != 0 {
ele := q[0]
vis[ele.x][ele.y] = true
q = q[1:]
isBorder := false
for _, dir := range dirs {
nx, ny := ele.x+dir.x, ele.y+dir.y
if !(0 <= nx && nx < m && 0 <= ny && ny < n && grid[nx][ny] == originalColor) {
isBorder = true
} else if !vis[nx][ny] {
q = append(q, point{nx, ny})
}
}
if isBorder {
borders = append(borders, point{ele.x, ele.y})
func dfs(x, y int, gInfo gridInfo, dirs []point, vis [][]bool, borders *[]point) {
vis[x][y] = true
isBorder := false
for _, dir := range dirs {
nx, ny := x+dir.x, y+dir.y
if !(0 <= nx && nx < gInfo.m && 0 <= ny && ny < gInfo.n && gInfo.grid[nx][ny] == gInfo.originalColor) {
isBorder = true
} else if !vis[nx][ny] {
dfs(nx, ny, gInfo, dirs, vis, borders)
}
}
if isBorder {
*borders = append(*borders, point{x, y})
}
}

View File

@ -62,50 +62,47 @@ type point struct {
y int
}
var (
borders []point
type gridInfo struct {
m int
n int
vis [][]bool
dirs []point
q []point
grid [][]int
originalColor int
)
}
func colorBorder(grid [][]int, row, col, color int) [][]int {
m, n = len(grid), len(grid[0])
vis = make([][]bool, m)
m, n := len(grid), len(grid[0])
dirs := []point{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
vis := make([][]bool, m)
for i := range vis {
vis[i] = make([]bool, n)
}
dirs = []point{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
originalColor = grid[row][col]
borders = []point{}
q = []point{{row, col}}
bfs(q, grid)
var borders []point
gInfo := gridInfo{
m: m,
n: n,
grid: grid,
originalColor: grid[row][col],
}
dfs(row, col, gInfo, dirs, vis, &borders)
for _, p := range borders {
grid[p.x][p.y] = color
}
return grid
}
func bfs(q []point, grid [][]int) {
for len(q) != 0 {
ele := q[0]
vis[ele.x][ele.y] = true
q = q[1:]
isBorder := false
for _, dir := range dirs {
nx, ny := ele.x+dir.x, ele.y+dir.y
if !(0 <= nx && nx < m && 0 <= ny && ny < n && grid[nx][ny] == originalColor) {
isBorder = true
} else if !vis[nx][ny] {
q = append(q, point{nx, ny})
}
}
if isBorder {
borders = append(borders, point{ele.x, ele.y})
func dfs(x, y int, gInfo gridInfo, dirs []point, vis [][]bool, borders *[]point) {
vis[x][y] = true
isBorder := false
for _, dir := range dirs {
nx, ny := x+dir.x, y+dir.y
if !(0 <= nx && nx < gInfo.m && 0 <= ny && ny < gInfo.n && gInfo.grid[nx][ny] == gInfo.originalColor) {
isBorder = true
} else if !vis[nx][ny] {
dfs(nx, ny, gInfo, dirs, vis, borders)
}
}
if isBorder {
*borders = append(*borders, point{x, y})
}
}
```