有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。
给你一个坐标 (sr, sc)
表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor
,让你重新上色这幅图像。
为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。
最后返回经过上色渲染后的图像。
示例 1:
输入: image = [[1,1,1],[1,1,0],[1,0,1]] sr = 1, sc = 1, newColor = 2 输出: [[2,2,2],[2,2,0],[2,0,1]] 解析: 在图像的正中间,(坐标(sr,sc)=(1,1)), 在路径上所有符合条件的像素点的颜色都被更改成2。 注意,右下角的像素没有更改为2, 因为它不是在上下左右四个方向上与初始点相连的像素点。
注意:
image
和image[0]
的长度在范围[1, 50]
内。- 给出的初始点将满足
0 <= sr < image.length
和0 <= sc < image[0].length
。 image[i][j]
和newColor
表示的颜色值在范围[0, 65535]
内。
跑出来结果是对的,但通不过,错误提示是:
=================================================================
==30==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x604000000180 at pc 0x000000407225 bp 0x7ffeba970cd0 sp 0x7ffeba970cc8
READ of size 8 at 0x604000000180 thread T0
#1 0x7f1b804552e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
0x604000000180 is located 0 bytes to the right of 48-byte region [0x604000000150,0x604000000180)
allocated by thread T0 here:
#0 0x7f1b81e7ace0 in operator new(unsigned long) (/usr/local/lib64/libasan.so.5+0xe9ce0)
#5 0x7f1b804552e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
Shadow bytes around the buggy address:
0x0c087fff7fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c087fff7ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c087fff8000: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fd
0x0c087fff8010: fa fa fd fd fd fd fd fd fa fa fd fd fd fd fd fd
0x0c087fff8020: fa fa fd fd fd fd fd fd fa fa 00 00 00 00 00 00
=>0x0c087fff8030:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c087fff8040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c087fff8050: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c087fff8060: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c087fff8070: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c087fff8080: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==30==ABORTING
求大佬解答
class Solution {
public:
bool vis[55][55] = {false};
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {
int color = image[sr][sc];
dfs(sr,sc,image, color, newColor);
return image;
}
void dfs(int x, int y, vector<vector<int>>& image,int color,int newColor)
{
if(x-1 < 0 || x-1 >= image.size() || y-1 < 0 || y-1 >= image[0].size() || vis[x-1][y-1] == true) return;
if(image[x-1][y-1] == color && vis[x-1][y-1] == false)
{
vis[x-1][y-1] == true;
image[x-1][y-1] = newColor;
dfs(x+1,y,image, color, newColor);
dfs(x-1,y,image, color, newColor);
dfs(x,y+1,image, color, newColor);
dfs(x,y-1,image, color, newColor);
}
}
};