【LeetCode练习】[中等]1034. 边框着色
1034. 边框着色
题目来源
算法思想:二维数组
题目:
思路:
- 首先寻找连通部分, 标记遍历过的格子;
- 在找连通部分中, 判断当前格子是否是边界, 如果是边界, 进行着色;
- 采用深度优先遍历方法
java代码
class Solution {private int num;private int row;private int col;private boolean[][] flag;public int[][] colorBorder(int[][] grid, int r0, int c0, int color) {row &#61; grid.length;col &#61; grid[0].length;num &#61; grid[r0][c0];if(num &#61;&#61; color){return grid;}flag &#61; new boolean[row][col];dfsFill(grid, r0, c0, color);return grid;}private void dfsFill(int[][] grid, int i, int j, int color) {if (i > -1 && i < row && j > -1 && j < col && grid[i][j] &#61;&#61; num && !flag[i][j]) {if (i &#61;&#61; 0 || i &#61;&#61; row-1 || j &#61;&#61; 0 || j &#61;&#61; col-1 || (!flag[i-1][j] && grid[i-1][j] !&#61; num) || (!flag[i&#43;1][j] && grid[i&#43;1][j] !&#61; num) || (!flag[i][j-1] && grid[i][j-1] !&#61; num) || (!flag[i][j&#43;1] && grid[i][j&#43;1] !&#61; num)) {grid[i][j] &#61; color;}flag[i][j] &#61; true;dfsFill(grid, i-1, j, color);dfsFill(grid, i&#43;1, j, color);dfsFill(grid, i, j-1, color);dfsFill(grid, i, j&#43;1, color);}}
}