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

算法通关村第十八关 | 青铜 | 回溯

1.回溯

回溯可以视为递归的拓展,有着明确的解题模板。

很大的不同之处是有一个撤销处理结果的操作,但是大框架就是遍历 N 叉树。

回溯主要解决暴力枚举都解决不了的问题。

回溯模板:

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择本层集合中元素(画成树,就是树节点孩子的大小)) {处理节点;backtracking();回溯,撤销处理结果;}
}

回溯完整代码示例:返回 1 到 n 中所有可能的 k 个数的组合

public List<List<Integer>> combine(int n, int k) {List<List<Integer>> resultList = new ArrayList<>();if (k <= 0 || n < k) {return resultList;}Deque<Integer> path = new ArrayDeque<>();dfs(n, k, 1, path, res);return res;
}public void dfs(int n, int k, int startIndex, Deque<Integer> path, List<List<Integer>> resultList) {if (path.size() == k) {resultList.add(new ArrayList<>(path));return;}for (int i = startIndex; i <= n; i++) {path.addLast(i);dfs(n, k, i + 1, path, resultList);path.removeLast();}
}

2.回溯题目:输出二叉树的所有路径

原题:力扣257.

class BinaryTreePaths {List<String> ans = new ArrayList<>();public List<String> binaryTreePaths(TreeNode root) {dfs(root, new ArrayList<>());return ans;}private void dfs(TreeNode root, List<Integer> temp) {if (root == null) {return;}temp.add(root.val);if (root.left == null && root.right == null) {ans.add(getPathString(temp));}dfs(root.left, temp);dfs(root.right, temp);temp.remove(temp.size() - 1);}private String getPathString(List<Integer> temp) {StringBuilder sb = new StringBuilder();sb.append(temp.get(0));for (int i = 1; i < temp.size(); i++) {sb.append("->").append(temp.get(i));}return sb.toString();}
}

3.回溯题目:路径总和问题

原题:力扣113.

class PathSum {List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> pathSum(TreeNode root, int targetSum) {LinkedList<Integer> path = new LinkedList<>();dfs(root, targetSum, path);return res;}public void dfs(TreeNode root, int targetSum, LinkedList<Integer> path) {if (root == null) {return;}targetSum -= root.val;path.add(root.val);if (targetSum == 0 && root.left == null && root.right == null) {res.add(new LinkedList(path));}dfs(root.left, targetSum, path);dfs(root.right, targetSum, path);path.removeLast();}
}

如果对您有帮助,请点赞关注支持我,谢谢! ❤
如有错误或者不足之处,敬请指正! ❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤

http://www.lryc.cn/news/258356.html

相关文章:

  • 蓝牙在物联网中的应用,相比WIFI和NFC的优势?
  • Altair推出 Altair RapidMiner 2023 平台,提供生成式 AI 功能
  • 包管理工具npm与yarn
  • 深度学习 Day11——T11优化器对比实验
  • (十六)Flask之蓝图
  • 面试问题--文件IO
  • SpringBoot中实现跨域的几种常用方式
  • MeterSphere实战(一)
  • ESP32-Web-Server编程-在网页中插入图片
  • <软考>软件设计师-4知识产权与标准化(总结)
  • 唯创知音WTVxxx语音芯片在免洗烘干机中的应用:提升用户体验与产品智能化
  • golang游戏服务器 - tgf系列课程06
  • 【Canvas】记录一次从0到1绘制风场空间分布图的过程
  • 如何用gpt改写文章 (1) 神码ai
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring依赖注入数值问题
  • egen3 rowwise().maxCoeff()的使用
  • 关于Pytorch和Numpy中的稀疏矩阵sparse的知识点
  • 2024年AI云计算专题研究报告:智算带来的变化
  • 孩子还是有一颗网安梦——Bandit通关教程:Level 5 → Level 6
  • vue2-elementUI部分组件样式修改
  • fijkplayer flutter 直播流播放
  • Javascript的基本语法(规范)
  • vue chrome debugger 无效
  • JRT实现Cache的驱动
  • ESP32网络开发实例-Web串口(WebSerial)
  • P2 Qt Creator创建第一个Qt程序
  • 加班、效率和价值
  • 【QT 5 调试软件+(Linux下验证>>>>串口相关初试串口)+Windows下qt代码在Linux下运行+参考win下历程+基础样例】
  • 地址栏不安全提示
  • glib编译与实战