[LeetCode] 733. Flood Fill_Easy tag: BFS
An image
is represented by a 2-D array of integers, each integer representing the pixel value of the image (from 0 to 65535).
Given a coordinate (sr, sc)
representing the starting pixel (row and column) of the flood fill, and a pixel value newColor
, "flood fill" the image.
To perform a "flood fill", consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color as the starting pixel), and so on. Replace the color of all of the aforementioned pixels with the newColor.
At the end, return the modified image.
Example 1:
Input:
image = [[1,1,1],[1,1,0],[1,0,1]]
sr = 1, sc = 1, newColor = 2
Output: [[2,2,2],[2,2,0],[2,0,1]]
Explanation:
From the center of the image (with position (sr, sc) = (1, 1)), all pixels connected
by a path of the same color as the starting pixel are colored with the new color.
Note the bottom corner is not colored 2, because it is not 4-directionally connected
to the starting pixel.
Note:
- The length of
image
andimage[0]
will be in the range[1, 50]
. - The given starting pixel will satisfy
0 <= sr < image.length
and0 <= sc < image[0].length
. - The value of each color in
image[i][j]
andnewColor
will be an integer in[0, 65535]
.
因为是2D-array的题目, 然后上下左右4个方向, 跟相对位置有关, 那么实际上跟distinct island很像, 那么很基础的做法, BFS. 此时要注意的是, 如果用BFS, 那么很有可能你的邻居后面可能再次找你, 所以记住, 要用BFS的时候, 判断需不需要加入visited 这样一个set来避免重复的判断某一个元素, 甚至无法跳出BFS的循环.
所以按照hiredintech上面的canvas的步骤, 一步一步来,
1. constraints:
1) image 的size给定了, 至少不用判断image的行或者列可能为空的情况.
2) 每个pixel的值给定了i,并且newcolor的值也给定 [0, 65535], 所以不用判断newcolor的范围.
3) image的max size给定了, 最大[50]*[50]
4) sr跟sc 默认为有效值, 很好, 不用判断了.
2. Ideas:
BFS: assum m*n array
T: O(m*n) 因为要扫到array的每一个元素
S: O(m*n) 因为queue可能最多把整个array都append进去.
1) edge case, newcolor == oricolor, 直接返回原array
2) queue, 初始化将(sr,sc) 放入
3) 如果queue非空, popleft, 然后ans[nr][nc] = newcolor, visited.add(nr, nc)
4) 然后判断4个directions, 另外注意还要判断是否已经visited过了.
3) 如果邻居有效, 并且color == oricolor, 没有visited过, queue.append(邻居)
4) 返回 ans
3. code:
class Solution:
def floodfill(self, image, sr, sc, newColor):
lr, lc, oricolor, ans = len(image), len(image[0]), image[sr][sc], image
if oricolor == newColor: return ans
queue, visited, dirs = collections.deque([(sr, sc)]), set(), [(0,1), (0, -1), (1, 0), (-1, 0)]
while queue:
pr, pc = queue.popleft()
ans[pr][pc] = newColor
visited.add((pr, pc))
for d1, d2 in dirs:
nr, nc = pr + d1, pc + d2
if 0 <= nr < lr and 0 <= nc < lc and image[nr][nc] == oricolor and (nr, nc) not in visited:
queue.append((nr, nc))
return ans
4. test cases:
1. newcolor == oricolor
2.
image = [[1,1,1],[1,1,0],[1,0,1]]
sr = 1, sc = 1, newColor = 2
Output: [[2,2,2],[2,2,0],[2,0,1]]
[LeetCode] 733. Flood Fill_Easy tag: BFS的更多相关文章
- LN : leetcode 733 Flood Fill
lc 733 Flood Fill 733 Flood Fill An image is represented by a 2-D array of integers, each integer re ...
- [LeetCode] 490. The Maze_Medium tag: BFS/DFS
There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...
- [LeetCode] 207 Course Schedule_Medium tag: BFS, DFS
There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...
- [LeetCode] 529. Minesweeper_ Medium_ tag: BFS
Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representin ...
- [LeetCode] 690. Employee Importance_Easy tag: BFS
You are given a data structure of employee information, which includes the employee's unique id, his ...
- [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS
Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...
- [LeetCode] 849. Maximize Distance to Closest Person_Easy tag: BFS
In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is emp ...
- [LeetCode] 513. Find Bottom Left Tree Value_ Medium tag: BFS
Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...
- [LeetCode] 821. Shortest Distance to a Character_Easy tag: BFS
Given a string S and a character C, return an array of integers representing the shortest distance f ...
随机推荐
- R语言(入门小练习篇)
问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希 ...
- 金蝶KIS问题解决汇总
1.帐套结转时,提示t_subsys插入重复键 解决: I.删除索引 alter table t_subsys drop constraint pk_subsys II.t_rp_initial表 ...
- echarts - 特殊需求实现代码汇总之【柱图】篇
其实包括饼图.线图在内,和柱图都一样的感觉,他们的配置项基本也是对应的那几个,所以想实现某些相似的效果,只要找到对应的属性就可以了. 1.柱图渐变色设置 还记得上篇线图中的实现是在areaStyle的 ...
- Eclipse中如何在指定工程中搜索指定的字符串
1.点击Search: 2.在下拉框中先择Search. 3. 4. 5.选择Java 6.
- div里粘贴文字后,移动光标至最后
cursormanager.js //Namespace management idea from http://enterprisejquery.com/2010/10/how-good-c-hab ...
- LeetCode 30 Substring with Concatenation of All Words(确定包含所有子串的起始下标)
题目链接: https://leetcode.com/problems/substring-with-concatenation-of-all-words/?tab=Description 在字符 ...
- phpstorm10激活加汉化
所用到的文件:链接:http://pan.baidu.com/s/1boNqCcJ 密码:61nz 分享文件夹中,有一个“PHP Storm激活和汉化方法.zip”文件其中有一个“resources_ ...
- 上传控件---淘宝kissy uploader+瀑布流显示
介绍Uploader : Uploader 是由阿里集团前端工程师们发起创建的一个开源 JS 框架.它具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性. Uploader是非 ...
- Android开发小技巧之根据position判断ListView是否在显示
使用ListView的时候,会有判断指定项是否正在显示的需求,其实很简单,代码如下: private boolean isShowing(int position) { int showViewCou ...
- Scala实现乘法口诀
object Test4 { def main(args: Array[String]) { for (i <- 1 to 9; j <- 1 to 9 if (j <= i ...