组合总和(回溯),leetcode习题

该博客介绍了一种使用回溯法求解组合总和的问题,其中目标是找到所有数字之和为n的k个正整数的组合。示例展示了如何通过递归和回溯算法在1到9的范围内找到符合条件的组合。博客内容涉及到算法设计和实现,重点在于回溯策略的应用。
摘要由CSDN通过智能技术生成

组合总和

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
所有数字都是正整数。
解集不能包含重复的组合。 
示例 1:
输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:
输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    LinkedList<Integer> path = new LinkedList<>();

    public List<List<Integer>> combinationSum3(int k ,int n){
        backtracking(n,k,1,0);
        return result;
    }

    public void backtracking(int targetSum,int k,int startIndex,int sum ){

        if (sum > targetSum ){
            return;
        }


        if (path.size() == k ){
            if (sum == targetSum){
                result.add(new ArrayList<>(path));
            }
        }
        for (int i = startIndex;i<=9;i++){
            path.add(i);
            sum+=i;
            //下一层的深度遍历
            backtracking(targetSum,k,i+1,sum);

            path.removeLast();
            sum-=i;

        }

    }
}
思路:
这个和组合的思路一样,for循环负责对树的每层做遍历,递归负责深度遍历,假如一个sum和判断即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值