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

牛客网【面试必刷TOP101】~ 06 递归/回溯

牛客网【面试必刷TOP101】~ 06 递归/回溯

文章目录

    • 牛客网【面试必刷TOP101】~ 06 递归/回溯
    • @[toc]
      • BM55 没有重复项数字的全排列(★★)
      • BM56 有重复项数字的全排列(★★)
      • BM57 岛屿数量(★★)
      • BM58 字符串的排列(★★)
      • BM59 N皇后问题(★★★)
      • BM60 括号生成(★★)
      • BM61 矩阵最长递增路径(★★)

BM55 没有重复项数字的全排列(★★)

回溯,移动元素至前

public class Solution {ArrayList<ArrayList<Integer>> res;public ArrayList<ArrayList<Integer>> permute (int[] nums) {res = new ArrayList<>();if (nums == null || nums.length == 0) return res;ArrayList<Integer> lists = new ArrayList<>();// Arrays.sort(nums);for (int num : nums) lists.add(num);backtrack(lists, 0, lists.size());return res;}  private void backtrack(ArrayList<Integer> lists, int begin, int end) {if (begin == end) {res.add(new ArrayList<>(lists));return;}for (int i = begin; i < end; i++) {int val = lists.remove(i);lists.add(begin, val);backtrack(lists, begin + 1, end);val = lists.remove(begin);lists.add(i, val);}}
}

BM56 有重复项数字的全排列(★★)

排序+ 回溯+set去重

public class Solution {ArrayList<ArrayList<Integer>> res;public ArrayList<ArrayList<Integer>> permuteUnique (int[] nums) {res = new ArrayList<>();if (nums == null || nums.length == 0) return res;ArrayList<Integer> lists = new ArrayList<>();Arrays.sort(nums);for (int num : nums) lists.add(num);backtrack(lists, 0, lists.size());return res;}private void backtrack(ArrayList<Integer> lists, int begin, int end) {if (begin == end) {res.add(new ArrayList<>(lists));return;}Set<Integer> set = new HashSet<>();for (int i = begin; i < end; i++) {if (set.contains(lists.get(i))) continue;set.add(lists.get(i));int val = lists.remove(i);lists.add(begin, val);backtrack(lists, begin + 1, end);lists.remove(begin);lists.add(i, val);}}}

BM57 岛屿数量(★★)

方法一:回溯(120ms)

public class Solution {private static int[] dirs = {-1, 0, 1, 0, -1}; public int solve (char[][] grid) {if (grid == null || grid.length == 0 || grid[0].length == 0) return 0;int count = 0;int r = grid.length, c = grid[0].length;for (int i = 0; i < r; i++) {for (int j = 0; j < c; j++) {if (grid[i][j] == '0') continue;dfs(grid, i, j, r, c);count++;}}return count;}private void dfs(char[][] grid, int i, int j, int r, int c) {if (i < 0 || j < 0 || i >= r || j >= c || grid[i][j] == '0') {return;}grid[i][j] = '0';for (int d = 0; d < 4; d++) {int x = i + dirs[d], y = j + dirs[d + 1];dfs(grid, x, y, r, c);}}}

更直观的定义

public class Solution {public int solve (char[][] grid) {int count = 0;for (int i = 0; i < grid.length; i++) {for (int j = 0; j < grid[0].length; j++) {if (grid[i][j] == '0') continue;sinkLand(grid, i, j);count++;}}return count;}private void sinkLand(char[][] grid, int i, int j) {if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == '0') {return;}grid[i][j] = '0';sinkLand(grid, i - 1, j);sinkLand(grid, i + 1, j);sinkLand(grid, i, j - 1);sinkLand(grid, i, j + 1);}}

BM58 字符串的排列(★★)

同BM56,有重复字符的全排列

public class Solution {ArrayList<String> res;public ArrayList<String> Permutation (String str) {res = new ArrayList<>();if (str == null || str.equals("")) return res;char[] cs = str.toCharArray();Arrays.sort(cs);backtrack(cs, 0, cs.length);return res;}private void backtrack(char[] cs, int begin, int end) {if (begin == end) {res.add(new String(cs));return;}Set<Character> set = new HashSet<>();for (int i = begin; i < end; i++) {if (set.contains(cs[i])) continue;set.add(cs[i]);swap(cs, begin, i);backtrack(cs, begin + 1, end);swap(cs, begin, i);}}private void swap(char[] cs, int i, int j) {char c = cs[i];cs[i] = cs[j];cs[j] = c;}
}

BM59 N皇后问题(★★★)

public class Solution {private int count;private int[] x;public int Nqueen (int n) {count = 0;x = new int[n];Arrays.fill(x, -1);backtrack(n);return count;}private void backtrack(int n) {int k = 0;while (k >= 0) {x[k]++;while (x[k] < n && isClash(k)) x[k]++;if (x[k] < n && k == n - 1) count++;if (x[k] < n && k < n - 1) {k++;} else {x[k--] = -1;}}}private boolean isClash(int k) {for (int i = 0; i < k; i++) {if (x[i] == x[k] || Math.abs(i - k) == Math.abs(x[i] - x[k])) {return true;}}return false;}}

BM60 括号生成(★★)

递归

public class Solution {public ArrayList<String> res;public ArrayList<String> generateParenthesis (int n) {res = new ArrayList<>();dfs(new String(), n, n);return res;}private void dfs(String s, int le, int ri) {if (le > ri || le < 0 || ri < 0) return;if (le == 0 && ri == 0) {res.add(s);return;}dfs(s + "(", le - 1, ri);dfs(s + ")", le, ri - 1);}
}

BM61 矩阵最长递增路径(★★)

dfs+记忆化搜索

public class Solution {private static final int[] dirs = {-1, 0, 1, 0, -1};private int[][] ms;private int R, C;public int solve (int[][] matrix) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return 0;}R = matrix.length;C = matrix[0].length;ms = new int[R][C];int res = 0;for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {res = Math.max(res, dfs(matrix, i, j));} }return res;}private int dfs(int[][] matrix, int i, int j) {if (ms[i][j] != 0) return ms[i][j];ms[i][j]++;for (int k = 0; k < 4; k++) {int x = i + dirs[k], y = j + dirs[k + 1];if (x < 0 || y < 0 || x >= R || y >= C || matrix[i][j] >= matrix[x][y]) {continue;}ms[i][j] = Math.max(ms[i][j], dfs(matrix, x, y) + 1);}return ms[i][j];}}

相关文章:

牛客网【面试必刷TOP101】~ 06 递归/回溯

牛客网【面试必刷TOP101】~ 06 递归/回溯 文章目录 牛客网【面试必刷TOP101】~ 06 递归/回溯[toc]BM55 没有重复项数字的全排列(★★)BM56 有重复项数字的全排列(★★)BM57 岛屿数量(★★)BM58 字符串的排列(★★)BM59 N皇后问题(★★★)BM60 括号生成(★★)BM61 矩阵最长递增路…...

ArcGIS Pro基础:【划分】工具实现等比例、等面积、等宽度划分图形操作

本次介绍【划分】工具的使用&#xff0c;如下所示&#xff0c;为该工具所处位置。使用该工具可以实现对某个图斑的等比例面积划分、相等面积划分和相等宽度划分。 【等比例面积】&#xff1a;其操作如下所示&#xff0c;其中&#xff1a; 1表示先选中待处理的图斑&#xff0c;2…...

括号匹配问题:栈的巧妙应用与代码优化【栈、优化、哈希表】

当解决算法问题时&#xff0c;灵活使用数据结构是至关重要的。在这个问题中&#xff0c;我们需要判断一个只包含括号的字符串是否有效&#xff0c;即括号是否能够正确匹配和闭合。使用栈这一数据结构可以很好地解决这个问题。 题目链接&#xff1a;有效的括号 解题思路&#xf…...

vue项目正确使用样式deep穿透

经常开发前端的程序员应该都知道前端一般都是组件化开发&#xff0c;为了避免样式污染通常会使用scoped添加属性选择器&#xff0c;此时如果我们想在父组件中修改子组件的样式便成了难题。其实&#xff0c;我们可以通过以下几种方式修改子组件样式&#xff0c; 组件样式穿透 …...

Jenkins持续集成-快速上手

Jenkins持续集成-快速上手 注&#xff1a;Jenkins一般不单独使用&#xff0c;而是需要依赖代码仓库&#xff0c;构建工具等。 搭配组合&#xff1a;GitGitee&#xff08;GitHub、GitLab&#xff09;MavenJenkins 前置准备 常见安装方式&#xff1a; war包Docker容器实例&…...

查看linux 所有运行的应用和端口命令

要查看 Linux 中所有运行的应用程序及其对应的端口&#xff0c;可以使用以下命令&#xff1a; 1. 使用 netstat 命令&#xff08;已被弃用&#xff0c;建议使用 ss 命令&#xff09;&#xff1a; netstat -tuln 这会显示当前系统上所有打开的网络连接和监听的端口。其中&#…...

Maven安装与配置,Eclipse配置Maven【图文并茂的保姆级教程】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Maven的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Maven是什么&#xff1f; 二.Maven的下…...

利用XLL文件投递Qbot银行木马的钓鱼活动分析

1概述 近期&#xff0c;安天CERT发现了一起利用恶意Microsoft Excel加载项&#xff08;XLL&#xff09;文件投递Qbot银行木马的恶意活动。攻击者通过发送垃圾邮件来诱导用户打开附件中的XLL文件&#xff0c;一旦用户安装并激活Microsoft Excel加载项&#xff0c;恶意代码将被执…...

2023CNSS——WEB题解(持续更新)

[Baby] SignIn 进来看到 按钮点击不了&#xff0c;想到去修改代码&#xff0c;要“检查“&#xff0c;但这里的右键和F12都不可用 还好还有其他方法 检查的各种方法 选用一种后进入检查页面 删掉这里的disabled即可 点击后得到flag [Baby] Backdoor 进入&#xff0c…...

Unity之ShaderGraph 节点介绍 数学节点

数学 高级Absolute&#xff08;绝对值&#xff09;Exponential&#xff08;幂&#xff09;Length&#xff08;长度&#xff09;Log&#xff08;对数&#xff09;Modulo&#xff08;余数&#xff09;Negate&#xff08;相反数&#xff09;Normalize&#xff08;标准化矢量&…...

springboot mongo 使用

nosql对我来说&#xff0c;就是用它的变动列&#xff0c;如果列是固定的&#xff0c;我为什么不用mysql这种关系型数据库呢&#xff1f; 所以&#xff0c;现在网上搜出来的大部分&#xff0c;用实体类去接的做法&#xff0c;并不适合我的需求。 所以&#xff0c;整理记录一下…...

如何使用appuploader制作apple证书​

转载&#xff1a;如何使用appuploader制作apple证书​ 如何使用appuploader制作apple证书​ 一.证书管理​ 点击首页的证书管理 二.新建证书​ 点击“添加”&#xff0c;新建一个证书文件 免费账号制作证书只有7天有效期&#xff0c;没有推送消息功能&#xff0c;推送证书…...

Promise详细版

promise基础原理到难点分析 常见的Promise的方法解读 扩展async和await深入分析 逐步分析Promise底层逻辑代码 一、Promise基础 1.什么是promise 为了解决回调地狱&#xff1a; //2.设置点击事件btn.onclick function() {//3.创建ajax实例化对象let xhr new XMLHttpRe…...

v-for循环生成的盒子只改变当前选中的盒子的样式

1.给盒子添加动态属性:class"[index isActive?active-box:choose-box]" <div v-for"(item,index) in zyList" :key"item.sid" :class"[index isActive?active-box:choose-box]" click"getKmList(item,index)"…...

Spring Data JPA源码

导读: 什么是Spring Data JPA? 要解释这个问题,我们先将Spring Data JPA拆成两个部分&#xff0c;即Sping Data和JPA。 从这两个部分来解释。 Spring Data是什么? 摘自: https://spring.io/projects/spring-data Spring Data’s mission is to provide a familiar and cons…...

如何防止CSRF攻击

背景 随着互联网的高速发展&#xff0c;信息安全问题已经成为企业最为关注的焦点之一&#xff0c;而前端又是引发企业安全问题的高危据点。在移动互联网时代&#xff0c;前端人员除了传统的 XSS、CSRF 等安全问题之外&#xff0c;又时常遭遇网络劫持、非法调用 Hybrid API 等新…...

linuxARM裸机学习笔记(7)----RTC实时时钟实验

基础概念&#xff1a; I.MX6U 内部也有个RTC 模块&#xff0c;但是不叫作“ RTC ”&#xff0c;而是叫做“ SNVS ”。 SNVS 直译过来就是安全的非易性存储&#xff0c; SNVS 里面主要是一些低功耗的外设&#xff0c;包括一个 安全的实时计数器 (RTC) 、一个单调计数器 (mo…...

NSS [UUCTF 2022 新生赛]ez_upload

NSS [UUCTF 2022 新生赛]ez_upload 考点&#xff1a;Apache解析漏洞 开题就是标准的上传框 起手式就是传入一个php文件&#xff0c;非常正常的有过滤。 .txt、.user.ini、.txxx都被过滤了&#xff0c;应该是白名单或者黑名单加MIME过滤&#xff0c;只允许.jpg、.png。 猜测二…...

【操作系统】操作系统知识点总结(秋招篇)

文章目录 前言操作系统主要做了哪些工作&#xff1f;进程 线程 协程之间的区别进程的组成部分介绍一下进程的PCB讲一下进程的五态 以及它们的状态转移用户态和内核态是什么&#xff1f;进程在用户态和内核态之间是如何切换的讲一下进程之间的通信方式讲一下进程调度的三个层次介…...

篇十九:迭代器模式:遍历集合

篇十九&#xff1a;"迭代器模式&#xff1a;遍历集合" 开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun/。 另外有2本不错的关于设计模式的资料&…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

HTML中各种标签的作用

一、HTML文件主要标签结构及说明 1. <&#xff01;DOCTYPE html> 作用&#xff1a;声明文档类型&#xff0c;告知浏览器这是 HTML5 文档。 必须&#xff1a;是。 2. <html lang“zh”>. </html> 作用&#xff1a;包裹整个网页内容&#xff0c;lang"z…...