为什么 FloodFill 算法超过了 Leetcode 的最大递归限制?
Why is FloodFill algorithm exceeding Leetcode's maximum recursion limit?
我正在使用与非常流行的 岛屿数量 问题相同的逻辑来研究 floodfill 算法。因此,当我 运行 带有示例输入的代码时,此解决方案有效,但一旦我提交,它就会显示 Recursion Error: maximum recursion depth exceeded in comparison
。
我怎样才能做得更好?我觉得不错,但我知道有问题。
def floodfill(grid,sr,sc,newColor):
og= grid[sr][sc]
recurse(grid,sr,sc,newColor,og)
return grid
def recurse(grid,sr,sc,newColor,og):
if grid[sr][sc]!= og:
return
grid[sr][sc] = newColor
if sr !=0:
recurse(grid,sr-1,sc,newColor,og)
if sc !=0:
recurse(grid,sr,sc-1,newColor,og)
if sc != len(grid[0])-1:
recurse(grid,sr,sc+1,newColor,og)
if sr != len(grid)-1:
recurse(grid,sr+1,sc,newColor,og)
floodfill([[1,1,1],[1,1,0],[1,0,1]],1,1,2)
我相信代码适用于 newColor != og 的情况。但我的猜测是你看到了你的错误,因为在 newColor == og 的情况下,停止条件
if grid[sr][sc]!= og:
return
永远不会发生,导致 recurse
无限递归。这可以通过在您的 floodfill
方法中为此边缘情况添加检查来解决。
我正在使用与非常流行的 岛屿数量 问题相同的逻辑来研究 floodfill 算法。因此,当我 运行 带有示例输入的代码时,此解决方案有效,但一旦我提交,它就会显示 Recursion Error: maximum recursion depth exceeded in comparison
。
我怎样才能做得更好?我觉得不错,但我知道有问题。
def floodfill(grid,sr,sc,newColor):
og= grid[sr][sc]
recurse(grid,sr,sc,newColor,og)
return grid
def recurse(grid,sr,sc,newColor,og):
if grid[sr][sc]!= og:
return
grid[sr][sc] = newColor
if sr !=0:
recurse(grid,sr-1,sc,newColor,og)
if sc !=0:
recurse(grid,sr,sc-1,newColor,og)
if sc != len(grid[0])-1:
recurse(grid,sr,sc+1,newColor,og)
if sr != len(grid)-1:
recurse(grid,sr+1,sc,newColor,og)
floodfill([[1,1,1],[1,1,0],[1,0,1]],1,1,2)
我相信代码适用于 newColor != og 的情况。但我的猜测是你看到了你的错误,因为在 newColor == og 的情况下,停止条件
if grid[sr][sc]!= og:
return
永远不会发生,导致 recurse
无限递归。这可以通过在您的 floodfill
方法中为此边缘情况添加检查来解决。