回溯的undo choice

重写N皇后和分割回文串,发现会想不明白path.remove(path.size() - 1)是在if里面还是if外面,问了GPT感觉很清楚

题目
N皇后

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<String>> solveNQueens(int n) {dfs(n, 0);List<List<String>> resStr = new ArrayList<>();for (int i = 0; i < res.size(); i++) {List<String> tmp = new ArrayList<>();List<Integer> tmpPath = res.get(i);for (int j = 0; j < tmpPath.size(); j++) {StringBuilder sb = new StringBuilder();for (int k = 0; k < n; k++) {if (k == tmpPath.get(j)) {sb.append('Q');}else {sb.append('.');}}tmp.add(sb.toString());}resStr.add(tmp);}return resStr;}public void dfs(int n, int row) {if (row == n) {res.add(new ArrayList(path));return;}for(int col = 0; col < n; col++) {path.add(col);if (isValis(path)) {dfs(n, row + 1);}path.remove(path.size() - 1);}}public boolean isValis(List<Integer> path) {int row_size = path.size() - 1;for (int i = 0; i < row_size; i++) {int diff = Math.abs(path.get(i) - path.get(row_size));if (diff == 0 || diff == row_size - i) {return false;}}return true;}
}

分割回文串

class Solution {List<List<String>> res = new ArrayList<>();List<String> path = new ArrayList<>();public List<List<String>> partition(String s) {dfs(s, 0);return res;}public void dfs(String s, int start) {if (start == s.length()) {res.add(new ArrayList<>(path));return;}for (int i = start; i < s.length(); i++) {if (isParition(s, start, i)) {path.add(s.substring(start, i + 1));dfs(s, i + 1);path.remove(path.size() - 1);}}}public boolean isParition(String s, int i, int j) {while (i < j) {if (s.charAt(i) != s.charAt(j)) {return false;}i++;j--;}return true;}
}

G哥回答
G哥回答

总结
N皇后问题:每次尝试都需要回溯,无论是否成功,因此 path.remove() 在 for 循环内、if 语句外。
分割回文子串问题:只有在成功分割出回文子串后才需要回溯,因此 path.remove() 在 if 语句内。
这两个问题的回溯逻辑不同,导致 path.remove() 的位置不同。确保回溯操作能正确撤销当前的选择,以便探索其他可能的解决方案,是放置 path.remove() 的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269927.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十八章 Platform 设备驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

微信小程序之调查问卷

一、设计思路 1、界面 调查问卷又称调查表&#xff0c;是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷&#xff0c;可以在短时间内快速收集反馈信息。具体效果如下所示&#xff1a; 2、思路 此调查问卷采用服务器客户端的方式进行设计&#xff0c;服…

【0300】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (2 - 1)

1. 前言 在【0298】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (2)一文中讲解过Postgres内核在通过RangeVar打开一个目标关系表时,在函数parserOpenTable()中,会注册parser错误位置报告回调函数。 同时也说明了这个注册过程的使用模式。 本文将继续讲解该使用模…

【Linux】-----工具篇(编译器gcc/g++,调试器gdb)

目录 一、gcc/g 简单认识 程序的翻译过程认识gcc 预处理(宏替换) 编译 汇编 链接 宏观认识 如何理解&#xff08;核心&#xff09; 什么是链接&#xff1f; 链接的分类 二、gdb 基本的认识 基本操作及指令 安装gdb 启动gdb ​编辑 显示源代码(list) 运行程序…

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…

动视发布长篇“论文”试图证明:没有SBMM 只有高手受益

SBMM——基于技能的比赛匹配系统&#xff0c;一直是《使命召唤》和广大 FPS 玩家所诟病的东西&#xff0c;但是《使命召唤》抱怨的玩家最多&#xff0c;因为似乎它所使用的匹配系统是让技术较好的玩家体验最糟糕的。 动视在此前一改对匹配系统避而不谈的态度后&#xff0c;日前…

鸿蒙开发——axios封装请求、拦截器

描述&#xff1a;接口用的是PHP&#xff0c;框架TP5 源码地址 链接&#xff1a;https://pan.quark.cn/s/a610610ca406 提取码&#xff1a;rbYX 请求登录 HttpUtil HttpApi 使用方法

Hadoop单机版环境搭建

一 . 案例信息 Hadoop 的安装部署的模式一共有三种&#xff1a; 本地模式&#xff0c;默认的模式&#xff0c;无需运行任何守护进程&#xff08; daemon &#xff09;&#xff0c;所有程序都在单个 JVM 上执行。由 于在本机模式下测试和调试 MapReduce 程序较为方便&#x…

Object Detection in 20 Years: A Survey 论文阅读

前言 如果要学习目标检测&#xff0c;那了解目标检测发展历程和各个技术将有助于更好地学习。所以今天我们看一篇来自IEEE的综述。 论文名&#xff1a;Object Detection in 20 Years: A Survey 论文作者&#xff1a;Zhengxia Zou et.al. 期刊/会议名&#xff1a;IEEE 发表时间…

日记审计遵守合规安全要求

一、什么是日志审计系统 日记审计系统是一种用于记录、监视和分析系统日志的工具或系统。它主要用于帮助组织实时监控与分析各种事件和行为的日志记录&#xff0c;以便检测潜在的安全威胁&#xff0c;了解系统性能和进行故障排除。日志审计系统通常能够收集、存储和分析来自各…

用Python做一个翻译软件,比上浏览器快100倍

简单的用Python来做一个翻译软件 开发环境 Python 3.10 Pycharm模块使用 requests -> pip install requests hashlib tkinter案例分为三部分: 1. 爬虫: 获取翻译接口, 请求获取翻译结果问题1: 接口抓包分析问题2: 请求需要写cookie问题3: 不同文本翻译, s加密参数2. 界面…

PHP多场地预定小程序系统源码

一键畅游多地&#xff01;多场地预定小程序的超实用指南 段落一&#xff1a;【开篇&#xff1a;告别繁琐&#xff0c;预订新体验】 &#x1f389;&#x1f680; 还在为多个活动或会议的场地预订而头疼不已吗&#xff1f;多场地预定小程序来拯救你啦&#xff01;它像是一位贴心…

[Windows CMD] 检测网络连通性 ping

ping 是一个非常常用的网络工具&#xff0c;用于测试网络连接的可达性和测量网络延迟。它通过发送 ICMP (Internet Control Message Protocol) Echo Request 数据包到目标主机&#xff0c;并等待接收回显应答 (Echo Reply) 来工作。ping 命令可以帮助您快速检测网络问题&#x…

blender使用- 置换修改器

置换修改器 对于物体可以先做细分&#xff0c;然后添加置换修改器&#xff0c;添加贴图。再对贴图的参数进行修改&#xff0c;渲染想要的效果。 旋转模式下&#xff08;按下s&#xff09;&#xff0c;z表示方向&#xff0c;0表示平整

水源地(水库)泵闸远程控制与调度系统

水源地&#xff08;水库&#xff09;泵闸远程控制与调度系统是智慧水利管理领域的重要组成部分。这一系统集现代通信、自动化控制、物联网及大数据分析技术于一体&#xff0c;旨在实现对水源地&#xff08;水库&#xff09;泵闸设备的远程监控、智能调度和高效管理。还能够为管…

若依ruoyi+AI项目二次开发(智能售货机运营管理系统)

(一) 帝可得 - 产品原型 - 腾讯 CoDesign (qq.com)

Github 2024-07-26开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目2TypeScript项目2C++项目2HTML项目1Python项目1C#项目1Lua项目1JavaScript项目1Vue项目1C项目1免费编程学习平台:freeCodeCamp.org 创…

[C++] vector入门迭代器失效问题详解

文章目录 vector介绍**vector iterator 的使用** vector迭代器失效问题由扩容或改变数据引起的迭代器失效reserve的实现&#xff08;野指针&#xff09;insert实现&#xff08;迭代器位置意义改变&#xff09;insert修改后失效的迭代器 it迭代器失效 erase后的问题总结&#xf…

中断中使用事件组

文章目录 在中断里面使用事件组来改造程序配置MPU6050中断&#xff0c;PB5 INT![image.png](https://img-blog.csdnimg.cn/img_convert/14b1358946990cf8bd07a6e65c1fb7f0.png)配置mpu6050的中断引脚怎么使能mpu6050中断寄存的如下 注意&#xff1a;如果使用了中断后没出现想要…

移植江科大OLED显示汉字需要设置UTF-8格式

1.并且需要添加 --no-multibyte-chars //为了让软件能够识别到UTF-8的字符