穷举深搜暴搜回溯剪枝(3)

news2024/9/24 21:29:17

一)字母大小写全排列

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));
       else
           path.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)

 

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

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

相关文章

【Android】在AndroidStudio开发工具运行Java程序

在Android Studio开发工具中&#xff0c;Android系统开始就是用java语言开发的&#xff0c;还可以java代码来写程序&#xff0c;控制台&#xff0c;桌面应用&#xff0c;还可以写可调用的模块&#xff0c;这里讲一下创建Java程序步骤&#xff0c;方便入门java语言开发。 新建一…

数字化采购:提升效率、优化供应链的新趋势

随着信息技术的快速发展&#xff0c;数字化采购正成为企业追求效率和优化供应链的新趋势。数字化采购是利用数字技术和互联网平台&#xff0c;实现采购流程的自动化和在线化。本文将围绕数字化采购的应用场景&#xff0c;探讨其在采购环节中带来的效益与优势。 一、在线供应商…

家居行业解决方案 | 君子签电子签约助力家居企业减负增效

过去&#xff0c;家居行业因供需两端碎片化、服务链条较长等因素&#xff0c;导致线上发展较为缓慢&#xff0c;近年来&#xff0c;互联网的发展推动直播电商、兴趣电商兴起&#xff0c;促使家居行业数字化建设需求越来越为迫切。 合同管理作为家居行业企业经营的一项重要管理…

wordpress发表文章时报错: rest_cannot_create,抱歉,您不能为此用户创建文章(已解决)

使用wordpress 的rest api发布文章&#xff0c;首先使用wp-json/jwt-auth/v1/token接口获取token&#xff0c;然后再使用/wp-json/wp/v2/posts 接口发表文章&#xff0c;但是使用axios请求时&#xff0c;却报错&#xff1a; 但是&#xff0c;我在postman上却是可以的&#xff0…

RunnerGo五种压测模式你会配置吗?

我们在做性能测试时需要根据性能需求配置不同的压测模式如&#xff1a;阶梯模式。使用jmeter时我们需要安装插件来配置测试模式&#xff0c;为了方便用户使用&#xff0c;RunnerGo内嵌了压测模式这一选项&#xff0c;今天给大家介绍一下RunnerGo的几种压测模式和怎么根据性能需…

【原创科普教程】如何更改bangumi一键跳转脚本视频教程

【原创科普教程】如何更改bangumi一键跳转脚本视频教程 【原创科普教程】如何更改bangumi一键跳转脚本视频教程 - AcFun弹幕视频网 - 认真你就输啦 (?ω?)ノ- ( ゜- ゜)つロ【原创科普教程】如何更改bangumi一键跳转脚本视频教程,bangumi,bgm,,脚本安装地址: https://greasy…

浅谈新电改背景下电网企业综合能源服务商业模式研究及发展方向

安科瑞 华楠 摘要: 新电改方案实施后&#xff0c;由于输配电价的改革和售电侧的放开&#xff0c;电网企业的盈利模式也随之发生了变化。这就要求电网企业转变服务理念与经营方式&#xff0c;来寻求竞争优势。基于“魏朱六要素商业模式”模型&#xff0c;对电网企业综合能源服务…

《皮囊》阅读笔记

《皮囊》阅读笔记 2023年8月2号在杭州小屋读完&#xff0c;该书共收录14篇散文&#xff0c;内容大致分为两部分&#xff1a;前半部分讲述作者的阿太&#xff08;外婆的母亲&#xff09;、母亲、父亲关于生活哲学、房子、疾病与信仰的故事&#xff0c;后半部分讲述生活在小镇的张…

国标GB28181安防视频平台EasyGBS大批量通道接入后,创建角色接口未响应的排查

国标GB28181协议视频平台EasyGBS是基于国标GB28181协议的视频云服务平台&#xff0c;支持多路设备同时接入&#xff0c;并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级…

JavaSE【继承和多态】(2)(向上转型、向下转型、重写、动态绑定、静态绑定、多态的运用)

一、多态 1.多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c; 具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同 的状 态。 简单说就是&#xff0c;同一件事情&#xff0c;发生在不同对象身上&#xff0c;就会产生不同…

获取淘宝商品详情数据的几种方法(商品标题、商品价格、商品销量、详情图片、商品主图

淘宝作为中国最大的电商平台之一&#xff0c;拥有海量的商品信息和用户数据。对于电商从业人员和数据分析师来说&#xff0c;了解淘宝商品详情数据是非常重要的。本文将介绍几种获取淘宝商品详情数据的高效方法&#xff0c;并详细探讨每种方法的优缺点。 一、淘宝 API 淘宝开放…

SpringBoot整合邮件服务

SpringBoot整合邮件服务 发送邮件应该是网站的必备功能之一&#xff0c;什么注册验证&#xff0c;忘记密码或者是给用户发送营销信息。最早期的时候我们会 使用 JavaMail 相关 api 来写发送邮件的相关代码&#xff0c;后来 Spring 推出了 JavaMailSender 更加简化了邮件发送的…

无限遍历,Python实现在多维嵌套字典、列表、元组的JSON中获取数据

目录 背景 思路 新建两个函数A和B&#xff0c;函数 A处理字典数据&#xff0c;被调用后&#xff0c;判断传递的参数&#xff0c;如果参数为字典&#xff0c;则调用自身&#xff1b; 如果是列表或者元组&#xff0c;则调用列表处理函数B&#xff1b; 函数 B处理列表&#x…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)【三】

文章目录 SSM(Vue3ElementPlusAxiosSSM前后端分离)--基础环境搭建【三】项目介绍项目功能/界面● SSM 整合项目界面 配置Spring 和MyBatis , 并完成整合 SSM(Vue3ElementPlusAxiosSSM前后端分离)–基础环境搭建【三】 项目介绍 项目功能/界面 ● SSM 整合项目界面 配置Sprin…

C盘满了怎么办怎么清理

我的c盘只有128GB&#xff0c;由于工作需要安装的软件较多&#xff0c;虽然已经将软件等资料全部放到其它盘中&#xff0c;可是c盘却总是清理不及。 很多软件不能卸载&#xff0c;可是删除文件腾出的空间太有限了。 今天终于找到一个清理的新方法。 1、打开资源管理器&#x…

Java实现保证多个线程执行完毕再往下执行操作

要实现该需求可借助线程池的awaitTermination和isTerminated方法来实现&#xff0c;也可使用CountDownLatch计数器来实现。 1.使用awaitTermination方法阻塞主线程, 直至线程池关闭 public static void main(String[] args) throws InterruptedException {ExecutorService thr…

【逗老师的PMP学习笔记】引论篇

那个啥都学啥都研究的逗老师&#xff0c;最近开始学PMP了。 随笔记一记学习记录。 项目的基本知识 1、项目的特性 独特性渐进性临时性项目创造价值项目驱动变革项目满足组织需要 引申一点&#xff0c;项目-运营&#xff0c;工作中我们需要思考这两者的区别。 比如逗老师天天…

SpringSecurity5.7+最新案例 -- 用户名密码+验证码+记住我······

简介 根据最近一段时间的设计以及摸索&#xff0c;对SpringSecurity进行总结&#xff0c;目前security采用的是5.7版本&#xff0c;和以前的版本最大的差别就是&#xff0c;以前创建SecurityConfig需要继承WebSecurityConfigurerAdapter&#xff0c;而到了5.7以后&#xff0c;…

【2023全网最全最火教程】Web UI自动化测试之元素定位(超详细~)

目前&#xff0c;在自动化测试的实际应用中&#xff0c;接口自动化测试被广泛使用&#xff0c;但UI自动化测试也并不会被替代。让我们看看二者的对比&#xff1a; 接口自动化测试是跳过前端界面直接对服务端的测试&#xff0c;执行效率和覆盖率更高&#xff0c;维护成本更低&a…

做完两年外包,感觉自己废了一半....

先说一下自己的情况。大专生&#xff0c;17年通过校招进入湖南某软件公司&#xff0c;干了接近2年的点点点&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了五年的功能测试…