1+ // 给你一个大小为 m x n 的整数矩阵 grid ,表示一个网格。另给你三个整数 row、col 和 color 。网格中的每个值表示该位置处的网格块的颜色。
2+
3+ // 两个网格块属于同一 连通分量 需满足下述全部条件:
4+
5+ // 两个网格块颜色相同
6+ // 在上、下、左、右任意一个方向上相邻
7+ // 连通分量的边界 是指连通分量中满足下述条件之一的所有网格块:
8+
9+ // 在上、下、左、右四个方向上与不属于同一连通分量的网格块相邻
10+ // 在网格的边界上(第一行/列或最后一行/列)
11+ // 请你使用指定颜色 color 为所有包含网格块 grid[row][col] 的 连通分量的边界 进行着色,并返回最终的网格 grid 。
12+
13+ //
14+
15+ // 示例 1:
16+
17+ // 输入:grid = [[1,1],[1,2]], row = 0, col = 0, color = 3
18+ // 输出:[[3,3],[3,2]]
19+ // 示例 2:
20+
21+ // 输入:grid = [[1,2,2],[2,3,2]], row = 0, col = 1, color = 3
22+ // 输出:[[1,3,3],[2,3,3]]
23+ // 示例 3:
24+
25+ // 输入:grid = [[1,1,1],[1,1,1],[1,1,1]], row = 1, col = 1, color = 2
26+ // 输出:[[2,2,2],[2,1,2],[2,2,2]]
27+ //
28+
29+ // 提示:
30+
31+ // m == grid.length
32+ // n == grid[i].length
33+ // 1 <= m, n <= 50
34+ // 1 <= grid[i][j], color <= 1000
35+ // 0 <= row < m
36+ // 0 <= col < n
37+
38+
39+ // 来源:力扣(LeetCode)
40+ // 链接:https://leetcode-cn.com/problems/coloring-a-border
41+ // 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
42+
43+
44+
45+
46+ /**
47+ * @param {number[][] } grid
48+ * @param {number } row
49+ * @param {number } col
50+ * @param {number } color
51+ * @return {number[][] }
52+ */
53+ var colorBorder = function ( grid , row , col , color ) {
54+ const m = grid . length , n = grid [ 0 ] . length ;
55+ const visited = new Array ( m ) . fill ( 0 ) . map ( ( ) => new Array ( n ) . fill ( 0 ) ) ;
56+ const borders = [ ] ;
57+ const originalColor = grid [ row ] [ col ] ;
58+ const direc = [ [ 0 , 1 ] , [ 0 , - 1 ] , [ 1 , 0 ] , [ - 1 , 0 ] ] ;
59+ const q = [ ] ;
60+ q . push ( [ row , col ] ) ;
61+ visited [ row ] [ col ] = true ;
62+ while ( q . length ) {
63+ const node = q . pop ( ) ;
64+ const x = node [ 0 ] , y = node [ 1 ] ;
65+
66+ let isBorder = false ;
67+ for ( let i = 0 ; i < 4 ; i ++ ) {
68+ const nx = direc [ i ] [ 0 ] + x , ny = direc [ i ] [ 1 ] + y ;
69+ if ( ! ( nx >= 0 && nx < m && ny >= 0 && ny < n && grid [ nx ] [ ny ] === originalColor ) ) {
70+ isBorder = true ;
71+ } else if ( ! visited [ nx ] [ ny ] ) {
72+ visited [ nx ] [ ny ] = true ;
73+ q . push ( [ nx , ny ] ) ;
74+ }
75+ }
76+ if ( isBorder ) {
77+ borders . push ( [ x , y ] ) ;
78+ }
79+ }
80+ for ( let i = 0 ; i < borders . length ; i ++ ) {
81+ const x = borders [ i ] [ 0 ] , y = borders [ i ] [ 1 ] ;
82+ grid [ x ] [ y ] = color ;
83+ }
84+ return grid ;
85+ } ;
0 commit comments