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

算法---边界着色

题目

给你一个大小为 m x n 的整数矩阵 grid ,表示一个网格。另给你三个整数 row、col 和 color 。网格中的每个值表示该位置处的网格块的颜色。

两个网格块属于同一 连通分量 需满足下述全部条件:

两个网格块颜色相同
在上、下、左、右任意一个方向上相邻
连通分量的边界 是指连通分量中满足下述条件之一的所有网格块:

在上、下、左、右任意一个方向上与不属于同一连通分量的网格块相邻
在网格的边界上(第一行/列或最后一行/列)
请你使用指定颜色 color 为所有包含网格块 grid[row][col] 的 连通分量的边界 进行着色,并返回最终的网格 grid 。

示例 1:

输入:grid = [[1,1],[1,2]], row = 0, col = 0, color = 3
输出:[[3,3],[3,2]]
示例 2:

输入:grid = [[1,2,2],[2,3,2]], row = 0, col = 1, color = 3
输出:[[1,3,3],[2,3,3]]
示例 3:

输入:grid = [[1,1,1],[1,1,1],[1,1,1]], row = 1, col = 1, color = 2
输出:[[2,2,2],[2,1,2],[2,2,2]]

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 50
1 <= grid[i][j], color <= 1000
0 <= row < m
0 <= col < n

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/coloring-a-border
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决方法

    //一定要注意是边界fun colorBorder(grid: Array<IntArray>, row: Int, col: Int, color: Int): Array<IntArray> {//简单粗暴 直接按照思路走//题意有点难懂 边界 val dp = Array(grid.size) {BooleanArray(grid[0].size) { false }}//注意这里需要对二维数组 进行深copyval copyOf = grid.map { t -> t.copyOf() }.toTypedArray()dfs(grid, grid[row][col], color, row, col, dp,copyOf)return grid}fun dfs(grid: Array<IntArray>, old: Int, new: Int, row: Int, col: Int, dp: Array<BooleanArray>, origin: Array<IntArray>) {if (row in grid.indices && col in grid[0].indices && origin[row][col] == old && !dp[row][col]) {dp[row][col] = trueif (row == 0 || row == grid.size - 1 || col == 0 || col == grid[0].size - 1 || board(origin,row,col)) {grid[row][col] = new}dfs(grid, old, new, row + 1, col, dp,origin)dfs(grid, old, new, row, col + 1, dp,origin)dfs(grid, old, new, row - 1, col, dp,origin)dfs(grid, old, new, row, col - 1, dp,origin)}}fun board(grid: Array<IntArray>, row: Int, col: Int) : Boolean{if (row in grid.indices && col in grid[0].indices){if (grid[row + 1][col] != grid[row][col] ||grid[row - 1][col] != grid[row][col] ||grid[row ][col + 1] != grid[row][col] ||grid[row ][col - 1] != grid[row][col]){return true}}return false}

总结

1.既生瑜 何生亮
最近在看三国 几年前我也看过几次 但是从来都是看不到多少章就不看了
现在有二周了 看了上半部分了
感觉有些书。不到一些年纪就是读不进去
而且有些精彩的部分 看不懂 但是也不影响看懂的部分的精彩
读取一遍能够全部吸收。我觉得至少我认识的人中没有人能做到
长篇小说就是需要耐心、不可急躁
年轻就是容易急躁
也不懂的欣赏一些作品
现在我学会去以欣赏的角度问自己:
为什么三国可以成为经典?一定有他精彩的地方
这个精彩的地方我不想别人告诉我
我想自己去看看

http://www.lryc.cn/news/89596.html

相关文章:

  • 二叉排序树的查找、插入、删除
  • 《Opencv3编程入门》学习笔记—第三章
  • 如何从Ubuntu Linux中删除Firefox Snap?
  • 数学建模的初阶-快速上手
  • 复习向 C/C++ 编程语言简介和概括(C++复习向p1)
  • DRF之过滤,排序,分页
  • 我的Redis学习,共写了14篇博客文章
  • mPython软件使用指南
  • 龙芯2K1000实战开发-系统配置详解
  • 【一起撸个DL框架】5 实现:自适应线性单元
  • 开箱即用的工具函数库xijs更新指南(v1.2.6)
  • 【Netty】ChannelPipeline源码分析(五)
  • 并行计算技术解密:MPI和OpenMP的学习和应用指南
  • 什么是自动化测试框架?我们该如何搭建自动化测试框架?
  • Debezium报错处理系列之六十七:TopicAuthorizationException: Not authorized to access topics
  • javaWebssh中小学课件资源系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计
  • MySQL高级查询操作
  • Day53【动态规划】1143.最长公共子序列、1035.不相交的线、53.最大子序和
  • Three.js--》实现3d地球模型展示
  • <SQL>《SQL命令(含例句)精心整理版(6)》
  • 信息系统建设和服务能力评估证书CS
  • vue3引入路由
  • 前后端联调跨域问题
  • day11 - 手写数字笔迹细化
  • C++ QT QDBus基操
  • STM32的SPI外设
  • VMWare ESXI6.7创建虚拟机
  • TensorFlow 1.x学习(系列二 :4):自实现线性回归
  • Openwrt折腾记6-网络摄像头
  • C++判断大端小端