当前位置: 首页 > article >正文

[LeetCode] 733. 图像渲染

题目描述:

有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr ,  sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行上色 填充 。

为了完成 上色工作

  1. 从初始像素开始,将其颜色改为 color
  2. 对初始坐标的 上下左右四个方向上 相邻且与初始像素的原始颜色同色的像素点执行相同操作。
  3. 通过检查与初始像素的原始颜色相同的相邻像素并修改其颜色来继续 重复 此过程。
  4. 当 没有 其它原始颜色的相邻像素时 停止 操作。

最后返回经过上色渲染 修改 后的图像 。

示例 1:

输入:image = [[1,1,1],[1,1,0],[1,0,1]],sr = 1, sc = 1, color = 2

输出:[[2,2,2],[2,2,0],[2,0,1]]

解释:在图像的正中间,坐标 (sr,sc)=(1,1) (即红色像素),在路径上所有符合条件的像素点的颜色都被更改成相同的新颜色(即蓝色像素)。

注意,右下角的像素 没有 更改为2,因为它不是在上下左右四个方向上与初始点相连的像素点。

示例 2:

输入:image = [[0,0,0],[0,0,0]], sr = 0, sc = 0, color = 0

输出:[[0,0,0],[0,0,0]]

解释:初始像素已经用 0 着色,这与目标颜色相同。因此,不会对图像进行任何更改。

提示:

  • m == image.length
  • n == image[i].length
  • 1 <= m, n <= 50
  • 0 <= image[i][j], color < 216
  • 0 <= sr < m
  • 0 <= sc < n

题目链接:

. - 力扣(LeetCode)

解题主要思路:

采用广度优先遍历策略即bfs,比如例1,第一层为image[1][1],我们将它入队列,然后检测它的上下左右,符合要求的为image[0][1]和image[1][0],以此为例继续探索第三层。

解题代码:

class Solution {
public:
    typedef pair<int, int> PII;
    int dx[4] = {0, 0, 1, -1};
    int dy[4] = {1, -1, 0, 0};

    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
        int pre = image[sr][sc];
        if (pre == color) return image;

        int m = image.size(), n = image[0].size();
        queue<PII> que;
        que.push(make_pair(sr, sc));
        while (que.size()) {
            auto [a, b] = que.front();
            que.pop();
            image[a][b] = color;  // 上色
            for (int i = 0; i < 4; ++i) {
                // 检测它的上下左右是否需要上色
                int x = a + dx[i];
                int y = b + dy[i];
                if (x >= 0 && x < m && y >= 0 && y < n && image[x][y] == pre) {
                    que.push(make_pair(x, y));
                }
            }
        }
        return image;
    }
};


http://www.kler.cn/news/350900.html

相关文章:

  • vue2 a-input输入框使用正则限制为数字、英文及中文,出现吞字符和英文字符打断问题
  • pycharm导出环境安装包列表
  • 基于Spring Boot的宿舍管理系统设计与实现(源码+定制+开发)宿舍信息管理平台、智能宿舍系统开发、学生宿舍管理平台设计、宿舍入住与信息管理
  • Failed to fetch dynamically imported module
  • 案例分析-数据库系统
  • Android 自定义 Dialog 实现列表 单选,多选,搜索
  • el-date-picker选择时间后标准时间少1小时问题
  • HTML 标签简写及全称
  • 编写自定义dbt通用数据测试
  • 2.Node.js 缓冲器(Buffer)
  • Excel:vba实现批量修改文件名
  • 【pytorch】昇思大模型配置python的conda版本
  • Elasticsearch:Redact(编辑) processor
  • 地级市-节能环保支出数据(2007-2021年)
  • Java之泛型详解
  • 全星魅科技|应急卫星电话|北斗短报文终端|北斗三号短报文终端
  • python爬虫快速入门之---Scrapy 从入门到包吃包住
  • 武汉正向科技|焦炉移动机车连锁控制系统的介绍
  • Python AdaBoost自适应提升算法
  • |智能门票|008_django基于Python的智能门票设计与实现2024_i16z2v70
  • 大语言模型实战教程首发:基于深度学习的大规模自然语言处理模型LLM详解 -Shelly
  • 【Python系列】python打印获取异常信息
  • 京东Android最全面试题及参考答案
  • PyQt 入门教程(3)基础知识 | 3.1、使用QtDesigner创建.ui文件
  • 日本AZBIL山武燃烧控制器AUR450C82310D0说明书
  • Python logging模块实现日志饶接 按照时间命名