当前位置: 首页 > news >正文

穷举vs暴搜vs深搜vs回溯vs剪枝 算法专题

一. 全排列

全排列

class Solution {List<List<Integer>> ret;List<Integer> path;boolean[] check;public List<List<Integer>> permute(int[] nums) {ret = new ArrayList<>();//存放结果path = new ArrayList<>();存放每个路径的pathcheck = new boolean[nums.length];//记录是否被使用, 对应是下标dfs(nums);return ret;}public void dfs(int[] nums){if(path.size() == nums.length){//全部遍历完ret.add(new ArrayList<>(path));//添加结果return;}for(int i = 0; i < nums.length; i++){if(!check[i]){path.add(nums[i]);check[i] = true;dfs(nums);//还原现场check[i] = false;path.remove(path.size() - 1);}}}
}

二. 子集

子集
先画决策树, 再设计代码
解法一:

class Solution {List<List<Integer>> ret;List<Integer> path;public List<List<Integer>> subsets(int[] nums) {ret = new ArrayList<>();path = new ArrayList<>();dfs(nums, 0);return ret;}public void dfs(int[] nums, int i){//要选择的下标if(i == nums.length){ret.add(new ArrayList<>(path));return ;}//选path.add(nums[i]);dfs(nums, i + 1);//恢复现场path.remove(path.size() - 1);//不选dfs(nums, i + 1);}
}

解法二: 按照数量添加

class Solution {List<List<Integer>> ret;List<Integer> path;public List<List<Integer>> subsets(int[] nums) {ret = new ArrayList<>();path = new ArrayList<>();dfs(nums, 0);return ret;}public void dfs(int[] nums, int pos) {ret.add(new ArrayList<>(path));//每个节点全部加入for(int i = pos; i < nums.length; i++){path.add(nums[i]);dfs(nums, i + 1);//只能添加此时下标后面的, 防止重复path.remove(path.size() - 1);//恢复现场}}
}
http://www.lryc.cn/news/473396.html

相关文章:

  • Uni-App-02
  • 在做题中学习(72):最小栈
  • 详解软件设计中分库分表的几种实现以及应用示例
  • 随着飞行汽车的亮相,在环保方面有什么保护措施吗
  • docker安装、设置非sudo执行、卸载
  • WebSocket简单使用
  • 【FinalShell问题】FinalShell连接虚拟机超时问题
  • Matplotlib可视化——三维图与莫比乌斯带可视化
  • 【PyCharm配置Conda的虚拟环境】
  • 今日总结10.31
  • 2024年【汽车修理工(高级)】考试题及汽车修理工(高级)最新解析
  • 17. 从尾到头打印链表
  • 有没有噪音低的宠物空气净化器推荐?希喂、IAM性能PK
  • EasyExcel文件导入与导出
  • 【成都新篇】龙信科技电子取证实验室,引领科技取证新时代
  • Android View
  • 从一到无穷大 #38:讨论 “Bazel 集成仅使用 Cmake 的依赖项目” 通用方法
  • Python飞舞蝙蝠
  • shodan搜索引擎——土豆片的网安之路
  • uniapp 报错Invalid Host header
  • 删除 AzureArcSetup 安装程序及提示
  • NGPT:在超球面上进行表示学习的归一化 Transformer
  • 云原生Istio基础
  • Word2Vec优化与提升技巧
  • Java 开发——(下篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus
  • Redis 线程控制 问题
  • 005 IP地址的分类
  • Java 并发工具(12/30)
  • filebeat+elasticsearch+kibana日志分析
  • Google Recaptcha V2 简单使用