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

【LeetCode】733.图像渲染(深度优先搜索,java实现)

题目

链接

image-20200715192642095

分析

这道题非常简单,其实就是让你遍历当前图形的所有节点,并且修改颜色为新颜色就好了。通过dfs和bfs都能实现。代码如下:

class Solution {
    public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
        if(image[sr][sc]==newColor) return image;
        coloring(image,sr,sc,image[sr][sc],newColor);
        return image;
    }
    public void coloring(int[][] image,int x,int y,int oldColor,int newColor){
        if(x<0 || x>=image.length || y<0 || y>=image[0].length || image[x][y]!=oldColor){
            return ;  //坐标越界和不同色的情况
        }
        image[x][y] = newColor;  //上色
        coloring(image,x+1,y,oldColor,newColor);
        coloring(image,x-1,y,oldColor,newColor);
        coloring(image,x,y+1,oldColor,newColor);
        coloring(image,x,y-1,oldColor,newColor);
    }
}
class Solution {
    public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
        if(newColor==image[sr][sc]) return image;
        int h=image.length, w=image[0].length;  //记录image的长宽
        int[][] direct = {{0,1},{0,-1},{1,0},{-1,0}};  //移动方向的数组
        Queue<int[]> q = new LinkedList<>();  //队列
        q.offer(new int[]{sr,sc});  //队列保存的是位置坐标
        int oldColor = image[sr][sc];  //记录旧颜色
        while(!(q.size()==0)){
            int[] p = q.poll();  //取出队首元素
            image[p[0]][p[1]] = newColor;  //上色
            for(int[] d: direct){  //将四周相同颜色的点的位置入队
                int new_sr = p[0]+d[0];
                int new_sc = p[1]+d[1];
                if(new_sr>=0 && new_sr<h && new_sc>=0 && new_sc<w && image[new_sr][new_sc]==oldColor){
                    q.offer(new int[]{new_sr,new_sc});
                }
            }
        }
        return image;
    }
}

相关文章:

  • 【LeetCode】56.合并区间(贪心算法,java实现)
  • 【LeetCode】旋转矩阵(原地选择+翻转两种方法,java实现)
  • 计算机基础(一):二进制详解
  • 计算机基础(二):压缩算法
  • 计算机基础(四):控制硬件
  • 【LeetCode】5.最长回文子串(中心扩散法,动态规划,超详细图文,java实现)
  • 【LeetCode】151.翻转字符串里的单词(三种方法,java实现)
  • 【LeetCode】28.实现strstr() (KMP超详细讲解,sunday解法等五种方法,java实现)
  • 【LeetCode】209.长度最小的子数组(滑动窗口,双指针等五种方法助你开阔思路,java实现)
  • Typora快捷键大全(含Windows和mac)!提升你的写作效率
  • Java基础(七):栈 Stack(使用方法详解)
  • Java基础(六):HashMap(使用方法详解)
  • Java基础 (三):LinkedList(含使用方法详解)
  • Java基础(二):迭代器(Iterator)(含使用方法详解)
  • Java基础(一):Java集合框架(超详细解析,看完面试不再怕)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • input的行数自动增减
  • js操作时间(持续更新)
  • leetcode46 Permutation 排列组合
  • nginx 负载服务器优化
  • 将 Measurements 和 Units 应用到物理学
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 配置 PM2 实现代码自动发布
  • 学习ES6 变量的解构赋值
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • PostgreSQL之连接数修改
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • $(function(){})与(function($){....})(jQuery)的区别
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)STM32单片机上位机
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (八)c52学习之旅-中断实验
  • (转载)Google Chrome调试JS
  • (轉貼) UML中文FAQ (OO) (UML)
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NetCore 如何动态路由
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET中 MVC 工厂模式浅析
  • /etc/skel 目录作用
  • /etc/sudoers (root权限管理)
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [c++] C++多态(虚函数和虚继承)
  • [codeforces]Recover the String
  • [java/jdbc]插入数据时获取自增长主键的值
  • [kubernetes]控制平面ETCD
  • [Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图
  • [LeetCode] 596:超过5名学生的课
  • [LeetCode]-225. 用队列实现栈
  • [Linux]创建新用户并授予root权限