穷举深搜暴搜回溯剪枝(3)
一)字母大小写全排列
784. 字母大小写全排列 - 力扣(LeetCode)
1)从每一个字符开始进行枚举,如果枚举的是一个数字字符,直接忽视
如果是字母的话,进行选择是变还是不变
2)当进行遍历到叶子结点的时候,直接将结果存放到ret里面即可
3)相对于是对于这个决策树做一个深度优先遍历
class Solution {List<String> ret=new ArrayList<>();StringBuilder path=new StringBuilder();public List<String> letterCasePermutation(String s) {char[] array=s.toCharArray();dfs(array,0);return ret;}public void dfs(char[] array,int index){if(path.length()==array.length){ret.add(path.toString());return;}if(index>=array.length) return;//选if(array[index]>='0'&&array[index]<='9'){path.append(array[index]);dfs(array,index+1);path.deleteCharAt(path.length()-1);}else{path.append(array[index]);dfs(array,index+1);path.deleteCharAt(path.length()-1);if(array[index]>='a'&&array[index]<='z')path.append((char)(array[index]-32));elsepath.append((char)(array[index]+32));dfs(array,index+1);path.deleteCharAt(path.length()-1);}} }
二)优美的排列
526. 优美的排列 - 力扣(LeetCode)
1)每一层开始就是从第一个数开始将所有的数进行枚举一遍,只要这个数没有使用过,就可以把这个数放在这里面试一试
2)还是需要判断一下这个数能否整除下标或者是能够被下标整除,只要上面的条件有一种情况不满足,那么就进行剪枝操作;
3)函数的递归出口:当遇到叶子节点的时候,直接返回结果
class Solution {List<List<Integer>> ret=new ArrayList<>();List<Integer> path=new ArrayList<>();boolean[] check;public int countArrangement(int n) {check=new boolean[n+1];dfs(n,1);return ret.size();}public void dfs(int n,int pos){if(path.size()==n){ret.add(new ArrayList<>(path));return;}for(int i=1;i<=n;i++){if((i%pos==0||pos%i==0)&&check[i]==false){path.add(i);check[i]=true;dfs(n,pos+1);path.remove(path.size()-1);check[i]=false;}}} }
三)N皇后:
51. N 皇后 - 力扣(LeetCode)
第一种画决策树的方法:
先考虑第一个格子能不能进行存放,当进行考虑下一个格子的时候,是进行挨着考虑的,一个格子一个格子看看能不能进行存放
第二种画决策树的方法:是通过一行一行的来进行考虑的
此时我不是一个格子一个格子的进行考虑,这一次我一次考虑一行,我只考虑第0行的皇后应该摆放在那里,应该只考虑第一行的皇后摆放在哪里,第二行的皇后应该摆放在那里,第三行的皇后应该摆放在那里,下面我们进行考虑一下当N=3的时候:
1)首先我们第一步应该考虑一下,第0行的皇后可以放在哪里,这个时候又出现三种情况可以放在(0,0)可以放在(0,1),还可以放在(0,2)
2)然后再次进行考虑,当我们第0行的三个皇后已经放好的情况下,那么此时再来进行考虑第一行,正常情况下如果不出现剪枝的情况,第一行也是可以存放三个位置的分别是(1,0),(1,1)和(1,2),但是此时考虑剪枝,这个时候就出现了,某一个行上面有两个皇后,对角线上面有两个皇后
每一层在做的事情:你给我一个行数,我在这一行内每一个格子存放一个皇后,如果我能够存放,我就把这个皇后放在这里没然后进行考虑下一行
递归出口:当我们枚举行数发生越界的时候,此时说明就已经得到了合法的情况,此时就可以把这个合法的情况加入到我们最终的结果中即可
如何剪枝:剪枝的目的就是考虑当前这个位置是否可以能够放上皇后
1)无脑循环:假设当前这个这个位置可以存放皇后,首先来判断这一行有没有放皇后,这一列有没有放皇后,这个皇后的左对角线有没有放皇后,这个皇后的右对角线有没有放皇后,时间复杂度是4n*2^n
在这种决策树的画法里面,我们是每一行每一行的来进行列举的,所以当我们进行列举这一行上面的三个位置的时候,是一定不会出现在这一行上面的;
2)类似于哈希表的策略:在这里面只是需要搞一个boolean数组就可以搞定这个题了
boolean checkcol[]=new boolean[n],如果在第一列上放了一个皇后,那么只是需要让这一列变成true即可,那么就是checkcol[1]=true,说明这一列已经有皇后了,所以使用布尔数组可以快速判断某一列是否有皇后了
3)判断对角线以及副对角线的策略:使用布尔数组+数学来进行解决
四)有效的数独:
36. 有效的数独 - 力扣(LeetCode)
相关文章:

穷举深搜暴搜回溯剪枝(3)
一)字母大小写全排列 784. 字母大小写全排列 - 力扣(LeetCode) 1)从每一个字符开始进行枚举,如果枚举的是一个数字字符,直接忽视 如果是字母的话,进行选择是变还是不变 2)当进行遍历到叶子结点的时候,直接将…...
Bash 脚本的参数等
bash 的 $值 $0 : 表示当前脚本的名称${BASH_SOURCE[0]} : 表示当前 Bash 脚本文件的路径,可以理解为 $0 的安全版本,防止被修改。$1 : 表示第一个参数,以此类推$ : 表示所有传入脚本的参数$UID : 表示当前用户的 ID 号。如果当前用户是 roo…...

从哪些方面学HTML技术? - 易智编译EaseEditing
学习HTML技术是前端开发的基础,它用于定义网页的结构和内容。以下是学习HTML技术时可以关注的方面: HTML基本语法: 了解HTML标签的基本语法和用法,学习如何创建HTML文档和元素。 常用HTML标签: 学习常用的HTML标签&…...

非阻塞IO
非阻塞IO fcntl 一个文件描述符, 默认都是阻塞IO。fcntl可以将某个文件描述符设置为非阻塞IO,先看一下文档介绍。 传入的cmd的值不同,后面追加的参数也不相同。 fcntl函数有5种功能: 复制一个现有的描述符(cmd F_DUPFD)。获得…...
Debian如何让multilib和交叉编译工具链共存
Debian一个槽点是gcc/g/gfortran-multilib和交叉编译工具链如gcc/g/gfortran-riscv64-linux-gnu会互相卸载,解决办法如下: 1、安装build-essential(gcc/g/libc6-dev/make/dpkg-dev)和gfortran,记下被安装的gcc版本&am…...

Flink之JDBC Sink
这里介绍一下Flink Sink中jdbc sink的使用方法,以mysql为例,这里代码分为两种,事务和非事务 非事务代码 import org.apache.flink.connector.jdbc.JdbcConnectionOptions; import org.apache.flink.connector.jdbc.JdbcExecutionOptions; import org.apache.flink.connector.…...

lifecycleScope Unresolved reference
描述 导入了lifecycle.lifecycleScope,但是在activity中使用lifecycleScope报错出现Unresolved reference找不到引用。 导包 import androidx.lifecycle.lifecycleScope使用 lifecycleScope.launch(Dispatchers.IO) {...}错误 方案 代码中的activity继承Activ…...
P5960 【模板】差分约束算法
【模板】差分约束算法 题目描述 给出一组包含 m m m 个不等式,有 n n n 个未知数的形如: { x c 1 − x c 1 ′ ≤ y 1 x c 2 − x c 2 ′ ≤ y 2 ⋯ x c m − x c m ′ ≤ y m \begin{cases} x_{c_1}-x_{c_1}\leq y_1 \\x_{c_2}-x_{c_2} \leq y_2 \\…...

VSCode---通过ctrl+鼠标滚动改变字体大小
打开设置然后在右边输editor.mouseWheelZoo勾选即可实现鼠标滚动改变字体大小 4.这种设置的字体大小是固定的...

视频监控汇聚平台EasyCVR视频分享页面WebRTC流地址播放不了是什么原因?
开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…...

Libevent开源库的介绍与应用
libeventhttps://libevent.org/ 一、初识 1、libevent介绍 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络ÿ…...

【LNMP】LNMP
LNMP:是目前成熟的企业网站的应用模式之一,指的是一套协同工作的系统和相关软件;能够提供静态页面服务,也可以提供动态web服务 L Linux系统,操作系统N Nginx网站服务,前端,提供前端的静态…...
uniapp自定义头部导航栏
有时我们需要一些特殊的头部导航栏页面,取消传统的导航栏,来增加页面的美观度。 下面我就教大家如何配置: 一、效果图 二、实现 首先在uniapp中打开pages.json配置文件,在单个路由配置style里面设置导航栏样式nav…...

Django实现音乐网站 ⑹
使用Python Django框架制作一个音乐网站, 本篇主要是在添加编辑过程中对后台歌手功能优化及表模型名称修改、模型继承内容。 目录 表模型名称修改 模型继承 创建抽象基类 其他模型继承 更新表结构 歌手新增、编辑优化 表字段名称修改 隐藏单曲数和专辑数 姓…...

dubbo-helloworld示例
1、工程架构 2、创建模块 (1)创建父工程,引入公共依赖 pom.xml依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></depende…...
电脑ADB连接手机的方式通过网络无法adb连接手机的问题(已解决)
首先电脑要下载adb工具,将压缩包解压到C盘:https://download.csdn.net/download/qq_43445867/87975072 1、使用USB线连接 打开手机USB调试;PC端安装手机USB驱动。 1.打开DOS命令窗口,进入adb文件夹,输入adb.exe devices回车列出设…...
79 | Python数据分析篇 —— Pandas中groupby聚合操作和透视表基础
Pandas是Python中最常用的数据处理库之一,它提供了高效的数据结构和数据分析工具。在进行数据分析和机器学习等领域的工作时,Pandas是必不可少的库之一。本文将介绍Pandas中的groupby聚合操作和透视表,包括groupby操作、透视表的基础知识、练习题和答案。 文章目录 Pandas中…...

iOS 搭建组件化私有库
一、创建私有库索引 步骤1是在没有索引库的情况下或者是新增索引的时候才需要用到(创建基础组件库) 首先在码云上建立一个私有库索引,起名为SYComponentSpec 二、本地添加私有库索引 添加私有库索引 pod repo add SYComponentSpec https:/…...

迅为全国产龙芯3A5000电脑运行统信UOS、银河麒麟、loongnix系统
iTOP-3A5000开发板采用全国产龙芯3A5000处理器,基于龙芯自主指令系统 (LoongArch) 的LA464微结构,并进一步提升频率,降低功耗,优化性能。在与龙芯3A4000处理器保持引脚兼容的基础上,频率提升至2.5GHZ,功耗降…...

枫叶时代:打造中国特色的传统文化IP
近年来,取材于传统文化的影视作品在文化产业市场受到前所未有的关注。作为一种兼具辨识度、影响力和流量变现能力的文化符号,影视IP既是文化产业的一个重要环节,也是国家文化软实力的直接体现。优秀的影视IP可以超越文字、语言、民族的障碍&a…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...