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

算法练习(6):牛客在线编程06 递归/回溯

package jz.bm;import java.io.PushbackInputStream;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;public class bm6 {/*** BM55 没有重复项数字的全排列*/ArrayList<ArrayList<Integer>> res = new ArrayList<>();public ArrayList<ArrayList<Integer>> permute(int[] num) {if (num.length == 0) {return res;}Arrays.sort(num);boolean[] used = new boolean[num.length];Arrays.fill(used, false);dfs(num, used, new ArrayList<>());return res;}private void dfs(int[] num, boolean[] used, ArrayList<Integer> list) {if (list.size() == num.length) {res.add(new ArrayList<>(list));} else {for (int i = 0; i < num.length; i++) {if (used[i]) {continue;}used[i] = true;list.add(num[i]);dfs(num, used, list);used[i] = false;list.remove(list.size() - 1);}}}/*** BM56 有重复项数字的全排列*/public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {if (num.length == 0) {return res;}Arrays.sort(num);boolean[] used = new boolean[num.length];Arrays.fill(used, false);dfs56(num, used, new ArrayList<>());return res;}private void dfs56(int[] num, boolean[] used, ArrayList<Integer> list) {if (list.size() == num.length) {res.add(new ArrayList<>(list));} else {for (int i = 0; i < num.length; i++) {if (used[i]) {continue;}if (i > 0 && num[i] == num[i - 1] && used[i - 1]) {continue;}used[i]  = true;list.add(num[i]);dfs56(num, used, list);used[i] = false;list.remove(list.size() - 1);}}}/*** BM57 岛屿数量*/public int solve (char[][] grid) {int m = grid.length;if (m == 0) {return 0;}int n = grid[0].length;if (n == 0) {return 0;}int res = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1') {res++;dfs57(grid, m, n, i, j);}}}return res;}private void dfs57(char[][] grid, int m, int n, int i, int j) {grid[i][j] = '0';if (i - 1 >= 0 && grid[i - 1][j] == '1') {dfs57(grid, m, n, i - 1, j);}if (i + 1 < m && grid[i + 1][j] == '1') {dfs57(grid, m, n, i + 1, j);}if (j - 1 >= 0 && grid[i][j - 1] == '1') {dfs57(grid, m, n, i, j - 1);}if (j + 1 < n && grid[i][j + 1] == '1') {dfs57(grid, m, n, i, j + 1);}}/*** BM58 字符串的排列*/ArrayList<String> strings = new ArrayList<>();public ArrayList<String> Permutation(String str) {if (str == null || "".equals(str)) {return strings;}char[] chars = str.toCharArray();Arrays.sort(chars);boolean[] used = new boolean[chars.length];Arrays.fill(used, false);dfs58(chars, used, new StringBuilder());return strings;}private void dfs58(char[] chars, boolean[] used, StringBuilder stringBuilder) {if (stringBuilder.length() == chars.length) {strings.add(new String(stringBuilder));} else {for (int i = 0; i < chars.length; i++) {if (used[i]) {continue;}if (i > 0 && chars[i] == chars[i - 1] && used[i - 1]) {continue;}stringBuilder.append(chars[i]);used[i] = true;dfs58(chars, used, stringBuilder);used[i] = false;stringBuilder.deleteCharAt(stringBuilder.length() - 1);}}}/*** BM60 括号生成*/ArrayList<String> arrayList = new ArrayList<>();public ArrayList<String> generateParenthesis (int n) {if (n == 0) {return arrayList;}dfs60(n, 0, 0, new StringBuilder());return arrayList;}private void dfs60(int n, int left, int right, StringBuilder stringBuilder) {if (left == n && right == n) {arrayList.add(new String(stringBuilder));return;}if (left < n) {stringBuilder.append("(");dfs60(n, left + 1, right, stringBuilder);stringBuilder.deleteCharAt(left + right);}if (right < left && right < n) {stringBuilder.append(")");dfs60(n, left, right + 1, stringBuilder);stringBuilder.deleteCharAt(left + right);}}/*** BM61 矩阵最长递增路径*/int max = 0;public int solve (int[][] matrix) {int m = matrix.length;int n = matrix[0].length;//这题dfs不需要记录visited, 因为能走的路径是单向的for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {dfs61(matrix, m, n, i, j, 1);}}return max;}private void dfs61(int[][] matrix, int m, int n, int i, int j, int count) {if (i - 1 >= 0 && matrix[i - 1][j] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i - 1, j, count + 1);}if (i + 1 < m &&  matrix[i + 1][j] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i + 1, j, count + 1);}if (j - 1 >= 0 && matrix[i][j - 1] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i, j - 1, count + 1);}if (j + 1 < n && matrix[i][j + 1] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i, j + 1, count + 1);}}
}

相关文章:

算法练习(6):牛客在线编程06 递归/回溯

package jz.bm;import java.io.PushbackInputStream; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays;public class bm6 {/*** BM55 没有重复项数字的全排列*/ArrayList<ArrayList<Integer>> res new ArrayList<>()…...

C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例

本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行局部二值化处理。 目录 图像二值化原理 局部二值化 自适应阈值 实例 效果...

MySQL多表关联查询

目录 1. inner join&#xff1a; 2. left join&#xff1a; 3. right join&#xff1a; 4.自连接 5.交叉连接&#xff1a; 6、联合查询 7、子查询 1. inner join&#xff1a; 代表选择的是两个表的交差部分。 内连接就是表间的主键与外键相连&#xff0c;只取得键值一致…...

flutter开发实战-CustomClipper裁剪长图帧动画效果

flutter开发实战-CustomClipper裁剪长图帧动画效果 在开发过程中&#xff0c;经常遇到帧动画的每一帧图显示在超长图上&#xff0c;需要处理这种帧动画效果。我这里使用的是CustomClipper 一、CustomClipper CustomClipper继承于Listenable abstract class CustomClipper e…...

CSS 中的优先级规则是怎样的?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐内联样式&#xff08;Inline Styles&#xff09;⭐ID 选择器&#xff08;ID Selectors&#xff09;⭐类选择器、属性选择器和伪类选择器&#xff08;Class, Attribute, and Pseudo-class Selectors&#xff09;⭐元素选择器和伪元素选择器…...

概率图模型(Probabilistic Graphical Model,PGM)

概率图模型&#xff08;Probabilistic Graphical Model&#xff0c;PGM&#xff09;&#xff0c;是一种用图结构来描述多元随机变量之间条件独立性的概率模型。它可以用来表示复杂的概率分布&#xff0c;进行有效的推理和学习&#xff0c;以及解决各种实际问题&#xff0c;如图…...

Oracle 知识篇+会话级全局临时表在不同连接模式中的表现

标签&#xff1a;会话级临时表、全局临时表、幻读释义&#xff1a;Oracle 全局临时表又叫GTT ★ 结论 ✔ 专用服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 共享服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 数据库驻留连接池模式&#xff1a;不同应…...

MySQL 数据库文件的导入导出

目录 数据库的导出 导出整个数据库 导出数据库中的数据表 导出数据库结构 导出数据库中表的表结构 导出多个数据库 导出所有数据库 数据库的导入 数据库的导出 mysqldump -h IP地址 -P 端口 -u 用户名 -p 数据库名 > 导出的文件名 用管理员权限打开cmd进入MySQL的bi…...

找不到资产文件project.assets.json

NuGet 在“obj”文件夹中写入名为 project.assets.json 的文件&#xff0c;.NET SDK 使用该文件来获取有关要传递到编译器的包的信息 。 如果在生成过程中找不到资产文件 project.assets.json&#xff0c;则会发生此错误。 1.执行命令的方式解决 点击工具&#xff0c;分别展开命…...

【python】python将json字符串导出excel | pandas处理json字符串保存为csv

如何将json转为csv 1、通过json直接转为csv 在Python中&#xff0c;你可以使用pandas库来处理DataFrame&#xff08;数据帧&#xff09;和将JSON数据转换为CSV格式。下面是一个简单的示例代码&#xff0c;展示了如何使用pandas库将JSON数据转换为CSV文件&#xff1a; import p…...

opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()

注意&#xff1a;新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性&#xff0c;以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程&…...

分布式系统理论

以前的架构...

Gartner发布2023年的存储技术成熟曲线

技术路线说明 Gartner自1995年起开始采用技术成熟度曲线&#xff0c;它描述创新的典型发展过程&#xff0c;即从过热期发展到幻灭低谷期&#xff0c;再到人们最终理解创新在市场或领域内的意义和角色。 一项技术 (或相关创新)在发展到最终成熟期的过程中经历多个阶段&#xff1…...

c++ 有元

友元分为两部分内容 友元函数友元类 友元函数 问题&#xff1a;当我们尝试去重载operator<<&#xff0c;然后发现没办法将operator<<重载成成员函数。因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作 数了。…...

安卓:网络框架okhttp

目录 一、okhttp介绍 1. OkHttpClient类&#xff1a; 常用方法&#xff1a; 2. Request类&#xff1a; 常用方法&#xff1a; 3. Response类&#xff1a; 常用方法&#xff1a; 4. Call类&#xff1a; 常用方法&#xff1a; 5. Interceptor接口&#xff1a; 常用方法&…...

Python爬虫 爬取图片

在我们日常上网浏览网页的时候&#xff0c;经常会看到一些好看的图片&#xff0c;我们就希望把这些图片保存下载&#xff0c;或者用户用来做桌面壁纸&#xff0c;或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键&#xff0c;选择另存为。但有些图片鼠标右键的时候并没…...

【云原生】Pod详讲

目录 一、Pod基础概念1.1//在Kubrenetes集群中Pod有如下两种使用方式&#xff1a;1.2pause容器使得Pod中的所有容器可以共享两种资源&#xff1a;网络和存储。1.3kubernetes中的pause容器主要为每个容器提供以下功能&#xff1a;1.4Kubernetes设计这样的Pod概念和特殊组成结构有…...

先进先出的队

文章目录 队列特点队列实现 队列特点 先进先出&#xff0c;后进后出 队列实现 queue.c#define _CRT_SECURE_NO_WARNINGS 1 #include"Queue.h" //初始化 void QueInit(Queue* pq) {assert(pq);pq->head NULL;pq->tail NULL;pq->size 0; } //入队&#…...

怎样学会单片机

0、学单片机首先要明白&#xff0c;一个单片机啥也干不了&#xff0c;学单片机的目的是学习怎么用单片机驱动外部设备&#xff0c;比如数码管&#xff0c;电机&#xff0c;液晶屏等&#xff0c;这个需要外围电路的配合&#xff0c;所以学习单片机在这个层面上可以等同为学习单片…...

数据结构笔记--常见二叉树分类及判断实现

目录 1--搜索二叉树 2--完全二叉树 3--平衡二叉树 4--满二叉树 1--搜索二叉树 搜索二叉树的性质&#xff1a;左子树的节点值都比根节点小&#xff0c;右子树的节点值都比根节点大&#xff1b; 如何判断一颗二叉树是搜索二叉树&#xff1f; 主要思路&#xff1a; 递归自底向…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...