mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 08:27:30 +08:00
add: leetcode 1034 readme
This commit is contained in:
111
leetcode/1034.Coloring-A-Border/README.md
Normal file
111
leetcode/1034.Coloring-A-Border/README.md
Normal file
@ -0,0 +1,111 @@
|
||||
# [1034. Coloring A Border](https://leetcode-cn.com/problems/coloring-a-border/)
|
||||
|
||||
## 题目
|
||||
|
||||
You are given an m x n integer matrix grid, and three integers row, col, and color. Each value in the grid represents the color of the grid square at that location.
|
||||
|
||||
Two squares belong to the same connected component if they have the same color and are next to each other in any of the 4 directions.
|
||||
|
||||
The border of a connected component is all the squares in the connected component that are either 4-directionally adjacent to a square not in the component, or on the boundary of the grid (the first or last row or column).
|
||||
|
||||
You should color the border of the connected component that contains the square grid[row][col] with color.
|
||||
|
||||
Return the final grid.
|
||||
|
||||
**Example 1**:
|
||||
|
||||
Input: grid = [[1,1],[1,2]], row = 0, col = 0, color = 3
|
||||
Output: [[3,3],[3,2]]
|
||||
|
||||
**Example 2**:
|
||||
|
||||
Input: grid = [[1,2,2],[2,3,2]], row = 0, col = 1, color = 3
|
||||
Output: [[1,3,3],[2,3,3]]
|
||||
|
||||
**Example 3**:
|
||||
|
||||
Input: grid = [[1,1,1],[1,1,1],[1,1,1]], row = 1, col = 1, color = 2
|
||||
Output: [[2,2,2],[2,1,2],[2,2,2]]
|
||||
|
||||
**Constraints:**
|
||||
|
||||
- m == grid.length
|
||||
- n == grid[i].length
|
||||
- 1 <= m, n <= 50
|
||||
- 1 <= grid[i][j], color <= 1000
|
||||
- 0 <= row < m
|
||||
- 0 <= col < n
|
||||
|
||||
## 题目大意
|
||||
|
||||
给你一个大小为 m x n 的整数矩阵 grid ,表示一个网格。另给你三个整数 row、col 和 color 。网格中的每个值表示该位置处的网格块的颜色。
|
||||
|
||||
当两个网格块的颜色相同,而且在四个方向中任意一个方向上相邻时,它们属于同一连通分量
|
||||
|
||||
边界:在连通分量的块中(前提)并且满足以下条件之一:
|
||||
(1)要么上下左右存在一个块不在连通分量里面
|
||||
(2)要么这个块的位置在整个grid的边框上
|
||||
|
||||
请你使用指定颜色 color 为所有包含网格块 grid[row][col] 的连通分量的边界进行着色,并返回最终的网格 grid 。
|
||||
|
||||
## 解题思路
|
||||
|
||||
- 用bfs进行遍历选出边界,使用color给边界着色
|
||||
|
||||
## 代码
|
||||
|
||||
```go
|
||||
package leetcode
|
||||
|
||||
type point struct {
|
||||
x int
|
||||
y int
|
||||
}
|
||||
|
||||
var (
|
||||
borders []point
|
||||
m int
|
||||
n int
|
||||
vis [][]bool
|
||||
dirs []point
|
||||
q []point
|
||||
originalColor int
|
||||
)
|
||||
|
||||
func colorBorder(grid [][]int, row, col, color int) [][]int {
|
||||
m, n = len(grid), len(grid[0])
|
||||
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)
|
||||
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})
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user