216. 组合总和 III017(回溯法求解)

这篇博客探讨了一种使用回溯法解决寻找特定和的整数组合问题的算法。作者通过详细解释思路和代码实现,展示了如何在k层排列树中找到所有可能的组合,其中第一层为1到9。递归函数的关键在于终止条件和路径回溯,确保搜索所有可能的解。
摘要由CSDN通过智能技术生成

一:题目

在这里插入图片描述

二:思路

1.总体来看这是一个解空间为k层的排列树 第一层为1~9
2.递归函数的参数和返回值
1>:返回值:vector<vector > res
每次的求解结果:vector path
2>:参数:
backtacking(int k,int n,int index,int sum)
这里需要的index是 因为我们每次往下递归的时候 我们的返回在 缩小
3.递归函数的终止条件为
k == path.size(),这里可能使 结果并不满足 n == sum 但也要结束递归,寻找下一个可行解即可

4.横向单层的for循环的为(1~9),纵向为递归的k层

三:上码

class Solution {
public:
    vector<vector<int> > ans;
    vector<int> path;

    void backtacking(int k,int n,int index,int sum){

        if (path.size()== k) {
            if (n == sum) ans.push_back(path);
            return;//如果 path.size() == k 而 n != sum 直接结束本次循环  
        }

        for (int i = index; i <= 9; i++) {
            sum += i;
            path.push_back(i);

            backtacking(k,n,i+1,sum);
            path.pop_back();//
            sum -= i;//注意的是每次往上回溯的时候我们都需要将上一层存进去的剪掉,为其他可行解提供空间
        }


    }

    vector<vector<int>> combinationSum3(int k, int n) {
       
       /*思路:
            1.总体来看这是一个解空间为k层的排列树 第一层为1~9
            2.递归函数的参数和返回值
              1>:返回值:vector<vector<int> > res
                每次的求解结果:vector<int> path
              2>:参数:
              backtacking(int k,int n,int index,int sum)
              这里需要的index是 因为我们每次往下递归的时候 我们的返回在 缩小
            3.递归函数的终止条件为
                k == path.size(),这里可能使 结果并不满足 n == sum 但也要结束递归,寻找下一个可行解即可

            4.横向单层的for循环的为(1~9),纵向为递归的k层    
       */


        backtacking(k,n,1,0);
        return ans;



    }
};

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天向上的菜鸡杰!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值