力扣216组合总和2

该代码使用回溯算法解决组合问题,寻找3个数字的组合,使得它们的和等于给定的目标值。在回溯过程中进行了剪枝操作,优化了搜索空间。类Solution中定义了主要方法combinationSum3,它通过调用backtracking进行递归计算,从数字1开始遍历到9,同时维护当前路径(path)和总和(sum),当路径长度达到目标k且总和等于n时,将路径添加到结果列表中。
摘要由CSDN通过智能技术生成

方法:回溯

剪枝操作

class Solution {
     public  List<List<Integer>>resul=new ArrayList<>();
     public  List<Integer>path=new ArrayList<>();
     static int sum=0;
    public List<List<Integer>> combinationSum3(int k, int n) {
       backtracking(k,n,1);
          return resul;
    }
     public void backtracking(int k,int n,int start)
     {
         //减去和的枝条
         if(sum>n)
              return;
         //终止条件
         if(path.size()==k)
         {
           if(sum==n)
            resul.add(new ArrayList<Integer>(path));
            return;
         }
         //单层递归逻辑
         //横向遍历
         //减枝:9-(k-path.size())+1,减去个数的枝条
        for(int i=start;i<=9-(k-path.size())+1;i++)
        {
          path.add(i);//处理结点
            sum=sum+i;
            backtracking(k,n,i+1);//递归
            sum=sum-i;
            path.remove(path.size()-1);//回溯,撤销处理结果
        }
     }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值