在使用dfs解决问题时,我遇到了运行时错误。
下面是错误:
AddressSanitizer:堆栈溢出地址0x7ffce7e6eff8 (pc 0x000000359715 bp 0x7ffce7e6f040 sp 0x7ffce7e6f000 T0
以下是问题链接:
(https://leetcode.com/problems/flood-fill/)
下面是我的代码:
class Solution {
public:
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {
int color=image[sr][sc];
dfs(image,sr,sc,color,newColor);
return image;
}
void dfs(vector<vector<int>> &image,int sr,int sc,int color,int newcolor)
{
if(sr<0 || sr>=image.size() || sc<0 || sc>=image[0].size() || image[sr][sc]!=color)
{
return;
}
image[sr][sc]=newcolor;
dfs(image,sr,sc+1,color,newcolor);
dfs(image,sr,sc-1,color,newcolor);
dfs(image,sr+1,sc,color,newcolor);
dfs(image,sr-1,sc,color,newcolor);
}
};它在以下测试用例中失败:
[0,0,0,0,1,1] 1 1 1
我想不出哪里出错了。
谢谢。
发布于 2020-06-14 03:34:15
检查newColor != color,否则会有无限递归,因为您依赖于颜色更改来避免重新访问以前访问过的像素。
这正是你失败的测试用例所发生的事情。
https://stackoverflow.com/questions/62309998
复制相似问题