马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
思绪
DFS,从给定的(row,col)位置开始深度优先搜索
解题过程
对于每一个满意条件的位置,还需判断该位置是否属于界限,如果是界限,则将其赋值为color
留意:不要在同一个数组内里一遍赋值一遍判断界限,这会导致错误答案
Code- class Solution {
- int dir[][] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
- static int vis[][];
- int m;
- int n;
- int tcolor;
- int num;
- int ans[][];
- public int[][] colorBorder(int[][] grid, int row, int col, int color) {
- tcolor = color;
- num = grid[row][col];
- m = grid.length;
- n = grid[0].length;
- vis = new int[m][n];
- ans = new int[m][n];
- for (int i = 0; i < m; i++) {
- System.arraycopy(grid[i], 0, ans[i], 0, n);
- }
- dfs(row, col, grid);
- return ans;
- }
- public void dfs(int x, int y, int[][] grid) {
- vis[x][y] = 1;
- if (isbj(x, y, grid))
- ans[x][y] = tcolor;
- for (int i = 0; i < 4; i++) {
- int newx = x + dir[i][0];
- int newy = y + dir[i][1];
- if (0 <= newx && newx < m && 0 <= newy && newy < n && vis[newx][newy] == 0 && grid[newx][newy] == num) {
- dfs(newx, newy, grid);
- }
- }
- }
- public boolean isbj(int x, int y, int[][] grid) {
- if (x == 0 || x == m - 1 || y == 0 || y == n - 1 || grid[x - 1][y] != num || grid[x + 1][y] != num
- || grid[x][y - 1] != num || grid[x][y + 1] != num)
- return true;
- else
- return false;
- }
- }
- 作者:菜卷
- 链接:https://leetcode.cn/problems/coloring-a-border/solutions/3032717/bian-jie-zhao-se-by-ashi-jian-chong-dan-5h5pa/
- 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复制代码 |