算法训练营day24(回溯算法01:理论基础,组合)

发布于:2024-12-06 ⋅ 阅读:(115) ⋅ 点赞:(0)
第七章 回溯算法part01 
今日内容:
 
● 理论基础 
● 77. 组合  
 
 详细布置 
 
 理论基础 
 
其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。
 
题目链接/文章讲解:https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html  
视频讲解:https://www.bilibili.com/video/BV1cy4y167mM  
 
 77. 组合  
 
对着 在 回溯算法理论基础 给出的 代码模板,来做本题组合问题,大家就会发现 写回溯算法套路。
 
在回溯算法解决实际问题的过程中,大家会有各种疑问,先看视频介绍,基本可以解决大家的疑惑。
 
本题关于剪枝操作是大家要理解的重点,因为后面很多回溯算法解决的题目,都是这个剪枝套路。 
 
题目链接/文章讲解:https://programmercarl.com/0077.%E7%BB%84%E5%90%88.html   
视频讲解:https://www.bilibili.com/video/BV1ti4y1L7cv 
剪枝操作:https://www.bilibili.com/video/BV1wi4y157er   
 

day24

组合

 class Solution {
     List<List<Integer>> result = new ArrayList<>();
     LinkedList<Integer> path = new LinkedList<>();//方便剪枝
     public List<List<Integer>> combine(int n, int k) { 
         bcaktracking(n,k,1);
         return result;
     }
     private void bcaktracking(int n , int k, int index){
         if( path.size() == k) {
             result.add(new ArrayList(path));
             return;
             }
         for( int i = index; i <= n; i++){
           //剪枝for( int i = index; i <= n-(k-path.size()) + 1; i++){
             path.add(i);
             bcaktracking(n,k,i+1);
             path.removeLast();
         }
     }
 }

组合求和

 class Solution {
   List<List<Integer>> result = new ArrayList<>();
   LinkedList<Integer> path = new LinkedList<>();
     int sum = 0;
   public List<List<Integer>> combinationSum3(int k, int n) {
     backTracking(n, k, 1);
     return result;
   }
 ​
   private void backTracking(int targetSum, int k, int startIndex) {
     // 减枝
     if (sum > targetSum) {
       return;
     }
 ​
     if (path.size() == k) {
       if (sum == targetSum) result.add(new ArrayList<>(path));
       return;
     }
 ​
     // 减枝 9 - (k - path.size()) + 1
     for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {
       path.add(i);
       sum += i;
       backTracking(targetSum, k, i + 1);
       //回溯
       path.removeLast();
       //回溯
       sum -= i;
     }
   }
 }

感谢大佬分享:

代码随想录-算法训练营day24【回溯算法01:理论基础、组合】-CSDN博客


网站公告

今日签到

点亮在社区的每一天
去签到