【DFS】733. 图像渲染

简介: 【DFS】733. 图像渲染

1. 题目描述

【DFS】图像渲染

2. 题目分析

  1. 题目给你了一个二维的地图,给你一个出发点的坐标,基本很明确了,就是考察的图的DFS或BFS
  2. 这里,题主选择的是DFS的非递归版本(不要问我为啥不用递归版本,因为我脑子理解不了递归~ _ ~),不过非递归也有一个好处,就是一些边界、满足条件,容易写和容易理解。
  3. 简单说一下思路,从坐标点出发,遍历上下左右4个点,遇到符合的(和坐标点相等),直接入栈,并标记一下该点,并将该点的值变成newColor,

3. 题目代码

class Solution {
  public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
    int[][] vis = new int[image.length][image[0].length];
        if(newColor == image[sr][sc]){
            return image;
        }
    DFS(image, sr, sc, vis, newColor);
    return image;
  }
  public static void DFS(int[][] image, int sr, int sc, int[][] vis, int newColor) {
    int xMax = image.length;
    int yMax = image[0].length;
    int d = image[sr][sc];
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    stack1.add(sr);
    stack2.add(sc);
    vis[sr][sc] = 1;
        image[sr][sc] = newColor;
    while (!stack1.isEmpty() && !stack2.isEmpty()) {
      int x = stack1.pop();
      int y = stack2.pop();
      if (x - 1 >= 0 && image[x - 1][y] == d && vis[x - 1][y] == 0) {
        stack1.add(x - 1);
        stack2.add(y);
        vis[x - 1][y] = 1;
                image[x-1][y] = newColor;
      }
      if (x + 1 < xMax && image[x + 1][y] == d && vis[x + 1][y] == 0) {
        stack1.add(x + 1);
        stack2.add(y);
        vis[x + 1][y] = 1;
                image[x+1][y] = newColor;
      }
      if (y - 1 >= 0 && image[x][y - 1] == d && vis[x][y - 1] == 0) {
        stack1.add(x);
        stack2.add(y - 1);
        vis[x][y - 1] = 1;
                image[x][y-1] = newColor;
      }
      if (y + 1 < yMax && image[x][y + 1] == d && vis[x][y + 1] == 0) {
        stack1.add(x);
        stack2.add(y + 1);
        vis[x][y + 1] = 1;
                image[x][y+1] = newColor;
      }
    }
  }
}


相关文章
|
2月前
ThreeJs动态复制物体
这篇文章介绍了如何在Three.js中实现3D物体的动态复制,并提供了通过鼠标操作来复制模型的具体实现方法。
34 1
Bootstrap5 图像形状1
使用 `.rounded` 类可让图片显示圆角效果;`.rounded-circle` 类可将图片设置为椭圆形;`.img-thumbnail` 类则用于创建带边框的图片缩略图。示例代码展示了如何应用这些类。
Bootstrap5 图像形状2
图片对齐方式包括左对齐(.float-start)、右对齐(.float-end)和居中对齐(.mx-auto 和 .d-block)。此外,通过添加 .img-fluid 类,可以使图片响应式,自动适应不同屏幕尺寸。
|
5月前
|
前端开发
css动画 —— 自定义不规则的动画路径 offset-path (含不规则的动画路径参数获取方法)
css动画 —— 自定义不规则的动画路径 offset-path (含不规则的动画路径参数获取方法)
124 1
|
6月前
|
存储 机器学习/深度学习 算法
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
|
7月前
|
JavaScript 前端开发 流计算
使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理
使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理
|
7月前
leetcode-733:图像渲染
leetcode-733:图像渲染
35 0
|
C++ Python
C++ VS Open3D点云显示颜色渲染滤波
C++ VS Open3D点云显示颜色渲染滤波
161 0
|
存储 移动开发 前端开发
H5:画布Canvas基础知识讲解(二)之插入图像、像素级操作、文字
​上一节介绍了H5:画布Canvas基础知识讲解(一)之canvas基础、2D context API、路径,接下来继续讲解H5:画布Canvas基础。