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. 实现技 ...
随机推荐
- Docker 镜像及容器命令
授人以鱼不如授人以渔,先列出官方命令文档 docker命令文档地址:https://docs.docker.com/engine/reference/commandline/images/ 镜像相关指 ...
- ESX与ESXi区别
VMware ESXi 与ESX 产品之比较 VMware vSphere 5.0 以后版本,所有底层虚拟化产品都改为ESXi产品,本文主要比较了ESXi与ESX的各自特点,以便对大家是否要把现有的E ...
- EBUSY: resource busy or locked, rmdir
方案一: 方案二: !!! 出现问题后,千万不要忽略npm提示你的警告... 如果以上两种方案还未解决,那么大概率是因为你的npm版本较低导致的,升级你的npm. cnpm install -g np ...
- 《机器人SLAM导航核心技术与实战》第1季:第0章_SLAM发展综述
<机器人SLAM导航核心技术与实战>第1季:第0章_SLAM发展综述 视频讲解 [第1季]0.第0章_SLAM发展综述-视频讲解 [第1季]0.1.第0章_SLAM发展综述-梳理定位导航技 ...
- 基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
本次演示部署环境:Windows 10专业版,转载请说明出处 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在 ...
- 使用benchmarksql测试数据库处理能力
我们所处行业的核心应用业务,当前还是传统的OLTP业务,应用系统使用 java 开发,并且不建议使用存储过程,使用 benchmarksql 压测数据库最公平,既可以测试数据库性能,也可以测试JDBC ...
- FastAPI依赖注入作用域与生命周期控制
title: FastAPI依赖注入作用域与生命周期控制 date: 2025/04/08 00:02:10 updated: 2025/04/08 00:02:10 author: cmdragon ...
- 基于STM32F4+FREERTOS进行结构体变量的传递
原始参考链接如下↓ Freertos 接收消息队列数据不对,是姿势不正确吗 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! https://www.armbbs.cn ...
- DPDI(Dispatch PDI)kettle调度管理平台之实操演练第001讲--手工调度本地PDI任务生成日期维度数据
DPDI实操演练第一讲 1.DPDI简介 DPDI Online 您的智能ETL任务调度专家 DPDI Online 是一款基于Kettle的强大在线任务调度平台,凭借其高效与灵活性,专为调度和监控K ...
- cesium裁切面实践
cesium裁切面实践:沙盒地址 (打不开的自行科学访问) 裁切面法线方向指向保留的部分,本案例通过法线配合unionClippingRegions参数实现相比官方案例没有的:多裁切面互裁,裁两边留中 ...