原题链接在这里:https://leetcode.com/problems/coloring-a-border/

题目:

Given a 2-dimensional grid of integers, each value in the grid represents the color of the grid square at that location.

Two squares belong to the same connected component if and only 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).

Given a square at location (r0, c0) in the grid and a color, color the border of the connected component of that square with the given color, and return the final grid.

Example 1:

Input: grid = [[1,1],[1,2]], r0 = 0, c0 = 0, color = 3
Output: [[3, 3], [3, 2]]

Example 2:

Input: grid = [[1,2,2],[2,3,2]], r0 = 0, c0 = 1, color = 3
Output: [[1, 3, 3], [2, 3, 3]]

Example 3:

Input: grid = [[1,1,1],[1,1,1],[1,1,1]], r0 = 1, c0 = 1, color = 2
Output: [[2, 2, 2], [2, 1, 2], [2, 2, 2]]

Note:

  1. 1 <= grid.length <= 50
  2. 1 <= grid[0].length <= 50
  3. 1 <= grid[i][j] <= 1000
  4. 0 <= r0 < grid.length
  5. 0 <= c0 < grid[0].length
  6. 1 <= color <= 1000

题解:

Could use BFS to find the border.

For current cell, its 4 neighbors, if any of them is out of boundary, or different color than grid[r0][c0], this is the border. Mark it.

Here can't change to new color yet, since later neighbor's neighbor may check this value, it needs to remain to its original color when doing BFS.

After BFS, iterate the grid again and change the border color.

Time Complexity: O(m * n). m = gird.length. n = grid[0].length.

Space: O(m * n).

AC Java:

 class Solution {
public int[][] colorBorder(int[][] grid, int r0, int c0, int color) {
if(grid == null || r0 < 0 || r0 >= grid.length || c0 < 0 || c0 >= grid[0].length || grid[r0][c0] == color){
return grid;
} int m = grid.length;
int n = grid[0].length;
int oriColor = grid[r0][c0];
LinkedList<int []> que = new LinkedList<>();
boolean [][] visited = new boolean[m][n];
boolean [][] border = new boolean[m][n];
que.add(new int[]{r0, c0});
visited[r0][c0] = true;
int [][] dirs = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; while(!que.isEmpty()){
int [] cur = que.poll();
boolean isBorder = false; for(int [] dir : dirs){
int x = cur[0] + dir[0];
int y = cur[1] + dir[1];
if(x < 0 || x >= m || y < 0 || y >= n || grid[x][y] != oriColor){
isBorder = true;
continue;
} if(visited[x][y]){
continue;
} que.add(new int[]{x, y});
visited[x][y] = true;
} if(isBorder){
border[cur[0]][cur[1]] = isBorder;
}
} for(int i = 0; i<m; i++){
for(int j = 0; j<n; j++){
if(border[i][j]){
grid[i][j] = color;
}
}
} return grid;
}
}

类似Island Perimeter.

LeetCode 1034. Coloring A Border的更多相关文章

  1. 【leetcode】1034. Coloring A Border

    题目如下: Given a 2-dimensional grid of integers, each value in the grid represents the color of the gri ...

  2. [Swift]LeetCode1034.边框着色 | Coloring A Border

    Given a 2-dimensional grid of integers, each value in the grid represents the color of the grid squa ...

  3. 算法与数据结构基础 - 深度优先搜索(DFS)

    DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...

  4. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  5. LeetCode Island Perimeter

    原题链接在这里:https://leetcode.com/problems/island-perimeter/ 题目: You are given a map in form of a two-dim ...

  6. Leetcode题解 - DFS部分题目代码+思路(756、1034、1110、491、721、988)

    756. 金字塔转换矩阵 """ 学到的新知识: from collections import defaultditc可以帮我们初始化字典,不至于取到某个不存在的值的时 ...

  7. [LeetCode] Design Snake Game 设计贪吃蛇游戏

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  8. [LeetCode] Range Sum Query 2D - Mutable 二维区域和检索 - 可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  9. [LeetCode] Range Sum Query 2D - Immutable 二维区域和检索 - 不可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

随机推荐

  1. springboot mybatis使注解和xml两种方式同时生效

    声明:该博客参考了:https://www.jianshu.com/p/53762ac6d31c 如果上面这个博客中的内容已经解决了你的问题,那就不用往下看了,如何按照上面的配置一直报这个异常: or ...

  2. Let's Encrypt之acme.sh

    前言 Let's Encrypt 是一个证书颁发机构(CA).是由互联网安全研究小组(ISRG,Internet Security Research Group)主导并开发的一个新型数字证书认证机构( ...

  3. axios源码入口以及公用方法

    axios学习笔记(公用方法) 源码地址 找到入口文件 axios/lib/axios.js var utils = require('./utils'); var bind = require('. ...

  4. win 10 上解压安装 MySQL 8

    win 10 上解压安装 MySQL 8 # 进入到mysql的bin目录底下操作: # 初始化mysql mysqld --initialize --console # 安装mysql服务 mysq ...

  5. pytorch tutorial 2

    这里使用pytorch进行一个简单的二分类模型 导入所有我们需要的库 import torch import matplotlib.pyplot as plt import torch.nn.func ...

  6. Sitecore 营销分类

    分类法是一种分层结构,可用于识别和组织信息.在Sitecore体验平台中,您可以使用分类法对营销活动进行分类,例如广告,目标和活动.您可以在市场营销控制面板中将分类标签应用于这些项目. 营销分类的四种 ...

  7. keyword:react native bridge

    js engine native react native bridge https://cn.bing.com/images/search?view=detailV2&id=AAF39636 ...

  8. Java程序员需要掌握的技能

    转自:https://www.cnblogs.com/harry335/p/5924505.html

  9. Node.js自动本地重启服务器

    node.js在本地项目中,更新 了代码 是不会自动刷新 的,要重启才能生效,每次更改代码又手动重启这样很麻烦. 可以安装 个supervisor.全局安装supervisor npm install ...

  10. android studio学习----The project encoding (windows-1252) does not match the encoding specified in the Gradle build files (UTF-8)

    Warning:The project encoding (windows-1252) does not match the encoding specified in the Gradle buil ...