Java——图像渲染

news2024/10/1 1:20:02

题目链接

leetcode在线oj题——图像渲染

题目描述

有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。

你也被给予三个整数 sr , sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。

为了完成 上色工作 ,从初始像素开始,记录初始坐标的 上下左右四个方向上 像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应 四个方向上 像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为 newColor 。

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

题目示例

在这里插入图片描述
输入: 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 = [[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

解题思路

可以使用深度优先的遍历,得出结果

定义一个nextposition的数组,代表接下来要走的位置
定义一个isUsed布尔数组,记录当前位置是否被遍历过

定义DFS方法,参数分别是image数组,isUsed数组,数组行数,数组列数,当前行,当前列,要更新的颜色,当前位置颜色

先修改当前位置的颜色,以及标记该位置为已遍历

然后分别找到下一个要遍历的位置,如果这个位置是已经遍历过或者越界了,就不做任何操作,否则继续递归DFS函数

最后返回image数组即可

代码

class Solution {
    int[][] nextPositoin = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}};
    public int[][] floodFill(int[][] image, int sr, int sc, int color) {
        if(image == null){
            return image;
        }
        boolean[][] isUsed = new boolean[image.length][image[0].length];
        int oldColor = image[sr][sc];
        DFS(image, isUsed, image.length, image[0].length, sr, sc, color, oldColor);
        return image;
    }

    public void DFS(int[][] image, boolean[][] isUsed, int row, int col,
                    int curX, int curY, int newColor, int oldColor){
        //当前位置修改颜色并标记已遍历
        image[curX][curY] = newColor;
        isUsed[curX][curY] = true;

        //确定下一个位置
        for (int i = 0; i < 4; i++) {
            int newX = curX + nextPositoin[i][0];
            int newY = curY + nextPositoin[i][1];

            //判断是否越界
            if(newX >= row || newX < 0 || newY >= col || newY < 0){
                continue;
            }

            //判断是否需要修改颜色
            if(image[newX][newY] == oldColor && !isUsed[newX][newY]){
                DFS(image, isUsed, row, col, newX, newY, newColor, oldColor);
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

互联网医院系统软件开发|互联网医院管理系统开发的好处

互联网医院一直是现在的热门行业&#xff0c;很多的医院已经开发了互联网医院&#xff0c;并且已经在良好的运行中&#xff0c;而有一些医院和企业正在开发中&#xff0c;或者打算开发互联网医院系统&#xff0c;其实这些企业和医院还是很有远见的&#xff0c;因为他们知道并了…

Swift 第三方 播放器AliyunPlayer(阿里云播放器)(源码)

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

卡尔曼滤波——一种基于滤波的时序状态估计方法

文章目录1. Kalman滤波及其应用2. Kalman原理公式推导&#xff1a;Step 1&#xff1a;模型建立Step 2&#xff1a;开始Kalman滤波Step 3&#xff1a;迭代滤波本文是对 How a Kalman filter works, in pictures一文学习笔记&#xff0c;主要是提炼核心知识&#xff0c;方便作者快…

已解决pip install wxPython模块安装失败

已解决&#xff08;pip install wxPython安装失败&#xff09;error: legacy-instal1-failure Encountered error while trying to install package.wxPython note: This is an issue with the package mentioned above&#xff0c;not pip. hint : See above for output from …

如何用AST还原某音的JSVMP

1. 什么是JSVMP vmp简单来说就是将一些高级语言的代码通过自己实现的编译器进行编译得到字节码&#xff0c;这样就可以更有效的保护原有代码&#xff0c;而jsvmp自然就是对JS代码的编译保护&#xff0c;具体的可以看看H5应用加固防破解-JS虚拟机保护方案。 如何区分是不是jsv…

OpenFeign 切换HttpClient遇到的问题

背景 OpenFeign支持三种Http请求方式&#xff0c;默认情况下通过jdk中的HttpURLConnection向下游服务发起http请求&#xff08;详见下图&#xff0c;源码详见feign.Client.Default&#xff09;&#xff0c; 默认的Client 采用 HttpURLConnection&#xff0c; 这种是无法复用的…

为什么一定要做集成测试?

集成测试&#xff0c;我们都不陌生&#xff0c;几乎我们产品每天都在进行。但是我们真的有好好思考&#xff1a;为什么一定要做集成测试吗&#xff1f;只是为了简单的将“积木”搭起来就行&#xff0c;还是有什么其他的深意&#xff1f; 深意可能不一定会有&#xff0c;但是意…

qt5.15 快速安装 国内源

1 qt5.15 安装问题 最大的问题就是需要在线下载与安装。即使挂了科学上网&#xff0c;国外的服务器下载速度也还是超级慢。 在网上找了各种解决办法后&#xff0c;终于找到一个快速下载安装的办法。 2 安装器下载 阿里源、清华源都没有Windows的安装器了&#xff0c;在腾讯…

IPv4地址细讲

文章目录一、IPv4地址简介二、IPv4地址的表示方法点分十进制记法三、IP地址的分类四、特殊IPv4地址&#xff1a;全 “0” 和全 “1”五、常用的三类IP地址使用范围六、五类IP地址的范围一、IPv4地址简介 IPv4地址分5类&#xff0c;每一类地址都由固定长度的字段组成&#xff1…

软件项目管理简答题复习(1)

1.项目&#xff1a;创造唯一的产品&#xff0c;唯一的服务临时性的努力 2.项目特征&#xff1a;不可见性&#xff0c;复杂性&#xff0c;一致性&#xff0c;变更性&#xff0c;特殊性 3.项目和日常活动的区别&#xff1f; 项目具有特殊性&#xff0c;负责人是项目经理&#…

软件项目管理计算题复习(1)

软件项目管理计算题复习&#xff08;1&#xff09; 1.关键路径&#xff1a;决定项目最早完成的一系列的活动。网络图中最长的路&#xff0c;最少的时差&#xff0c;总是差为0&#xff0c;也是关键路径。 2.最短路径也是最短工期 3.总时差&#xff1a;最晚开始-最早开始最晚结…

激光共聚焦显微镜在材料生产领域中的应用

在材料生产领域中&#xff0c;如需要分析金属材料/部件粗糙度的时候&#xff0c;不管是使用原子力显微镜还是台阶仪&#xff0c;都没有办法同时兼顾分辨率、扫描区域以及扫描速度。而基于激光共聚焦显微测量技术的共聚焦激光扫描显微镜&#xff0c;配备了真彩相机并提供还原的3…

NVIDIA CUDA初级教程视频学习笔记1

周斌老师 课程链接&#xff1a; 目录第一课内容生态环境第一课 CPU体系架构的概述什么是CPU指令存储器架构CPU内部的并行性第一课 预修课程&#xff1a; Cuda c programming guide 参考内容 1,2&#xff0c;3查找一下。 内容 CPU体系架构概述 并行程序设计概述 CUDA开发环境…

二叉树——二叉搜索树的最近公共祖先

二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#…

design\project\学习 OAuth 读书笔记(一)

OAuth&#xff08;一&#xff09; 原文链接&#xff1a;OAuth 2.0 tutorial | OAuth flows 目录OAuth&#xff08;一&#xff09;应用场景分析问题1&#xff1a;代表用户授予有限访问权限OAuth 代表用户授权问题2&#xff1a;允许第三方应用程序有限的访问API&#xff08;服务…

TPS74525PQWDRVRQ1典型应用TPS62992QRYTRQ1汽车用稳压器 规格参数

TPS74525PQWDRVRQ1线性稳压器 IC 2.5V 500MA 6WSON明佳达电子【概述】TPS745/TPS745-Q1可调节500mA LDO稳压器具有极低的静态电流&#xff0c;并可提供快速的线路和负载瞬态性能。TPS745/TPS745-Q1具有130mV的超低压差&#xff08;500mA电流&#xff09;&#xff0c;这有助于提…

EEP封装?METS封装?还是ZIP封装?

档案信息化行业的老兵想必对10多年前的EEP封装包印象深刻&#xff0c;其自包含、自描述、自证明的“洋葱结构”曾经火遍大江南北&#xff0c;为电子文件的真实性和完整性保证提供了一种重要手段&#xff0c;但其过分严谨刻板的封装结构也曾让很多档案从业人员抓狂。笔者曾经主导…

Java开发 - 分页查询初体验

前言在上一篇&#xff0c;我们对es进行了深入讲解&#xff0c;相信看过的小伙伴已经能基本掌握es的使用方法&#xff0c;我们知道&#xff0c;es主要针对的是搜索条件&#xff0c;在这方面es具有无可比拟的优势&#xff0c;但我们也会注意到&#xff0c;有时候搜索条件过于宽泛…

基于JavaWeb实现的学生选课系统(源码+数据库+文档)

一、项目简介 本项目是一套基于JavaWeb实现的学生选课系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;e…

基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v6.2版已发布

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架&#xff0c;超轻量级、高度提炼&#xff0c;一套API优雅支持UDP 、TCP 、WebSocket 三种协议&#xff0c;支持iOS、Android、H5、标准Java平台&#xff0c;服务端基于Netty编写。 工程开源地址是&…