Leetcode -733.图像渲染
题目:有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。
你也被给予三个整数 sr, sc 和 newColor 。你应该从像素 image[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,因为它不是在上下左右四个方向上与初始点相连的像素点。
示例 2 :
输入 : image = [[0, 0, 0], [0, 0, 0]], sr = 0, sc = 0, newColor = 2
输出 : [[2, 2, 2], [2, 2, 2]]
提示 :
m == image.length
n == image[i].length
1 <= m, n <= 50
0 <= image[i][j], newColor < 216
0 <= sr < m
0 <= sc < n
const int dx[4] = { 1,-1,0,0 }; const int dy[4] = { 0,0,1,-1 }; void dfs(int** image, int row, int col, int x, int y, int currcolor, int color) { //如果当前坐标像素值等于初始坐标像素值,进行深度搜索 if (image[x][y] == currcolor) { //先将当前元素像素值改成需要改变的颜色的像素 image[x][y] = color; //再判断该坐标的上下左右坐标 for (int i = 0; i < 4; i++) { int rx = x + dx[i], cy = y + dy[i]; if (rx >= 0 && rx < row && cy >= 0 && cy < col) { dfs(image, row, col, rx, cy, currcolor, color); } } } } int** floodFill(int** image, int imageSize, int* imageColSize, int sr, int sc, int color, int* returnSize, int** returnColumnSizes) { //返回的行长度 *returnSize = imageSize; //返回的列,因为需要返回的是二维数组,需要将原二维数组的列数一个一个放入返回的列二维数组 *returnColumnSizes = (int*)malloc(sizeof(int) * imageSize); for (int i = 0; i < imageSize; i++) { (*returnColumnSizes)[i] = imageColSize[0]; } //记录初始坐标的像素值 int currcolor = image[sr][sc]; //如果初始坐标像素值不等于需要修改的颜色值,进入dfs函数进行深度搜索 //否则直接返回原数组 if (currcolor != color) { dfs(image, imageSize, imageColSize[0], sr, sc, currcolor, color); } return image; }
Leetcode -744.寻找比目标字母大的最小字母
题目:给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。
返回 letters 中大于 target 的最小的字符。如果不存在这样的字符,则返回 letters 的第一个字符。
示例 1:
输入 : letters = [“c”, “f”, “j”],target = “a”
输出 : “c”
解释:letters 中字典上比 ‘a’ 大的最小字符是 ‘c’。
示例 2 :
输入 : letters = [“c”, “f”, “j”], target = “c”
输出 : “f”
解释:letters 中字典顺序上大于 ‘c’ 的最小字符是 ‘f’。
示例 3 :
输入 : letters = [“x”, “x”, “y”, “y”], target = “z”
输出 : “x”
解释:letters 中没有一个字符在字典上大于 ‘z’,所以我们返回 letters[0]。
提示:
2 <= letters.length <= 10^4
letters[i] 是一个小写字母
letters 按非递减顺序排序
letters 最少包含两个不同的字母
target 是一个小写字母
char nextGreatestLetter(char* letters, int lettersSize, char target) { //如果当前字母大于 target ,因为数组是非递减顺序,所以直接返回这个元素 //否则返回第一个字母 for (int i = 0; i < lettersSize; i++) { if (letters[i] > target) { return letters[i]; } } return letters[0]; }