day-101 界限着色

[复制链接]
发表于 2025-11-18 06:53:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

思绪
DFS,从给定的(row,col)位置开始深度优先搜索
解题过程
对于每一个满意条件的位置,还需判断该位置是否属于界限,如果是界限,则将其赋值为color
留意:不要在同一个数组内里一遍赋值一遍判断界限,这会导致错误答案
Code
  1. class Solution {
  2.     int dir[][] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
  3.     static int vis[][];
  4.     int m;
  5.     int n;
  6.     int tcolor;
  7.     int num;
  8.     int ans[][];
  9.     public int[][] colorBorder(int[][] grid, int row, int col, int color) {
  10.         tcolor = color;
  11.         num = grid[row][col];
  12.         m = grid.length;
  13.         n = grid[0].length;
  14.         vis = new int[m][n];
  15.         ans = new int[m][n];
  16.         for (int i = 0; i < m; i++) {
  17.             System.arraycopy(grid[i], 0, ans[i], 0, n);
  18.         }
  19.         dfs(row, col, grid);
  20.         return ans;
  21.     }
  22.     public void dfs(int x, int y, int[][] grid) {
  23.         vis[x][y] = 1;
  24.         if (isbj(x, y, grid))
  25.             ans[x][y] = tcolor;
  26.         for (int i = 0; i < 4; i++) {
  27.             int newx = x + dir[i][0];
  28.             int newy = y + dir[i][1];
  29.             if (0 <= newx && newx < m && 0 <= newy && newy < n && vis[newx][newy] == 0 && grid[newx][newy] == num) {
  30.                 dfs(newx, newy, grid);
  31.             }
  32.         }
  33.     }
  34.     public boolean isbj(int x, int y, int[][] grid) {
  35.         if (x == 0 || x == m - 1 || y == 0 || y == n - 1 || grid[x - 1][y] != num || grid[x + 1][y] != num
  36.                 || grid[x][y - 1] != num || grid[x][y + 1] != num)
  37.             return true;
  38.         else
  39.             return false;
  40.     }
  41. }
  42. 作者:菜卷
  43. 链接:https://leetcode.cn/problems/coloring-a-border/solutions/3032717/bian-jie-zhao-se-by-ashi-jian-chong-dan-5h5pa/
  44. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表