hot100之回溯下
单词搜索(079)
class Solution {
int m, n;
public boolean exist(char[][] board, String word) {
m = board.length;
n = board[0].length;
char[] words = word.toCharArray();
for(int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
if (backTrace(0, i, j, board, words)) return true;
}
}
return false;
}
private boolean backTrace(int idx, int row, int col, char[][] board, char[] words){
if (row < 0 || row >= m || col < 0 || col >= n || board[row][col] != words[idx]) return false;
if (idx == words.length -1) return true;
board[row][col] = '0';
boolean status = backTrace(idx+1, row+1, col, board, words) || backTrace(idx+1, row, col+1, board, words)||
backTrace(idx+1, row-1, col, board, words) || backTrace(idx+1, row, col-1, board, words);
board[row][col] = words[idx];
return status;
}
}
- 分析
简单回溯, 开开胃
分割回文串(131)
class Solution {
List<List<String>> res = new ArrayList<>();
List<String> path = new ArrayList<>();
public List<List<String>> partition(String s) {
backTrace(0, s);
return res;
}
private void backTrace(int idx, String s){
if (idx == s.length()){
res.add(new ArrayList(path));
return;
}
for (int j = idx; j < s.length(); j++){
if (isPalindrome(idx, j, s)){
path.add(s.substring(idx, j+1));
backTrace(j+1, s);
path.remove(path.size()-1);
}
}
}
private boolean isPalindrome(int lef, int rig, String s){
while(lef < rig){
if (s.charAt(lef++) != s.charAt(rig--)) return false;
}
return true;
}
}
- 分析
判断是否为回文串, 若是则分割
N皇后(051)
class Solution {
List<List<String>> res = new ArrayList<>();
public List<List<String>> solveNQueens(int n) {
int[] queens = new int[n];
boolean[] column = new boolean[n];
boolean[] attaRig = new boolean[2*n];
boolean[] attaLef = new boolean[2*n];
backTrace(0, queens, column, attaLef, attaRig);
return res;
}
private void backTrace(int row, int[] queens, boolean[] column, boolean[] attaLef, boolean[] attaRig ){
int n = column.length;
if (row == n){
List<String> temp = new ArrayList<>(n);
for(int col : queens){
char[] rowArray = new char[n];
Arrays.fill(rowArray, '.');
rowArray[col] = 'Q';
temp.add(new String(rowArray));
}
res.add(temp);
return;
}
for (int col = 0; col < n; col++){
int attaLefIdx = row - col + n -1;
if (!column[col] && !attaLef[attaLefIdx] && !attaRig[row + col] ){
queens[row] = col;
column[col] = attaLef[attaLefIdx] = attaRig[row + col] = true;
backTrace(row+1, queens, column, attaLef, attaRig);
column[col] = attaLef[attaLefIdx] = attaRig[row + col] = false;
}
}
}
}
- 分析
N皇后带来了一个条件 →<插入元素”行””列””对角线”不相容>
- 行不相容 →以行遍历, 一行只插入一个元素
- 列, 对角线不相容 → Boolean数组来标记
灵神太强大了
hot100之回溯下的更多相关文章
- Java实现 LeetCode 51 N皇后
51. N皇后 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决 ...
- RocketMq(三):server端处理框架及消费数据查找实现
rocketmq作为一个高性能的消息中间件,咱们光停留在使用层面,总感觉缺点什么.虽然rocketmq的官方设计文档讲得还是比较详细的,但纸上得来终觉浅!今天我们就来亲自挖一挖rocketmq的实现细 ...
- 源码篇:Flutter Provider的另一面(万字图文+插件)
前言 阅读此文的彦祖,亦菲们,附送一枚Provider模板代码生成插件! 我为啥要写这个插件呢? 此事说来话短,我这不准备写解析Provider源码的文章,肯定要写这框架的使用样例啊,然后再哔哔源码呀 ...
- CVE-2022-22947 SpringCloud GateWay SpEL RCE
CVE-2022-22947 SpringCloud GateWay SpEL RCE 目录 CVE-2022-22947 SpringCloud GateWay SpEL RCE 写在前面 环境准备 ...
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- leadcode的Hot100系列--17. 电话号码的字母组合--回溯的另一种想法的应用
提交leetcode的时候遇到了问题,一直说访问越界,但仔仔细细检查n多遍,就是检查不出来. 因为我用到了count全局变量,自加一来表明当前数组访问的位置, 后来突然想到,是不是在leetcode在 ...
- leadcode的Hot100系列--78. 子集--回溯
上一篇说了使用位运算来进行子集输出,这里使用回溯的方法来进行排序. 回溯的思想,我的理解就是: 把解的所有情况转换为树或者图,然后用深度优先的原则来对所有的情况进行遍历解析. 当然,因为问题中会包涵这 ...
- 深入理解 JavaScript,以及 Linux 下的开发调试工具
前言 JavaScript 是我接触到的第二门编程语言,第一门是 C 语言.然后才是 C++.Java 还有其它一些什么.所以我对 JavaScript 是非常有感情的,毕竟使用它有十多年了.早就想写 ...
- N皇后问题—初级回溯
N皇后问题,最基础的回溯问题之一,题意简单N*N的正方形格子上放置N个皇后,任意两个皇后不能出现在同一条直线或者斜线上,求不同N对应的解. 提要:N>13时,数量庞大,初级回溯只能保证在N< ...
- 从2-3-4树到红黑树(下) Java与C的实现
欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 相关博客: 从2-3-4树到红黑树(上) 从2-3-4树到红黑树(中) 1. 实现技 ...
随机推荐
- 3.14 + 1e10 - 1e10 = 0 ? ——浮点数的本质
3.14 + 1e10 - 1e10 = 0 ? --浮点数的本质 我们先看这样一个例子: #include <iostream> int main(int argc, char **ar ...
- NextJS CVE-2025-29927 安全漏洞
NextJS CVE-2025-29927 安全漏洞 CVE-2025-29927 是一个存在于 Next.js 框架中的关键安全漏洞.该漏洞允许攻击者通过伪造或篡改 x-middleware-sub ...
- 【Java】字符串常用操作
字符的常用技巧 char c; 字母的顺序:c - 'A'.c - 'a' 字母大小写转换:c - 'a' + 'A'.c - 'A' + 'a' 数字字符转换为数字:c - '0' String.S ...
- 配置Thymeleaf模板引擎
1).thymeleaf-starter: 关闭缓存 2).静态资源都放在static文件夹下就可以按照路径直接访问 3).页面放在templates下,直接访问 springboot ,访问项目的时 ...
- Java 中堆和栈的区别是什么?
Java 中堆和栈的区别 Java 中的堆(Heap)和栈(Stack)是两种不同的内存区域,它们有着不同的用途和特点.以下是它们的主要区别: 1. 存储内容 堆:用于存储对象实例以及类的实例变量.所 ...
- JuiceFS v1.3-beta1:全面优化 SQL 数据库支持,十亿级元数据管理新选项
JuiceFS v1.3-beta 今天正式发布.在这个版本中,除了进行了大量使用体验优化和 bug 修复外,新增如下特性: 新增 Python SDK:这是一个从企业版移植过来的特性,旨在支持 FU ...
- linux vim增强使用
目录 删除 编辑 删除 删除当前行 dd 删除当前行后面的所有行 dG 编辑 恢复为未修改前的状态 uu
- 个人对Debian桌面系统的简单使用分享
前言 自从安装Debian12作为双系统已经过了大半个月,平常主用Debian,偶尔切回Windows找找文档,总体来说体验还是很不错的.先贴个桌面照 为什么要使用Linux作为个人桌面 当初刚从Wi ...
- 【HUST】网安|计算机网络安全实验|实验二 DNS协议漏洞利用实验
写在最前: 这是我个人的实验记录,实现方式有很多种,多台虚拟机更容易做netwox. 认真整理和记录了一下容易出问题的地方. 代码仓库开了. 文章目录 涉及代码的仓库地址 计算机网络安全实验二 DNS ...
- 网络编程:反应堆_I/O模型和多线程模型实现
多线程设计的几个考虑 在反应堆reactor框架设计中,main reactor线程是一个acceptor线程,这个线程一旦创建,会以event_loop形式阻塞在event_dispatcher的d ...