leetcode刷题(数组list回溯法)20—组合总和 III

216. 组合总和 III

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
所有数字都是正整数。
解集不能包含重复的组合。

class Solution {
    
    
    // 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
    // 内存消耗:37 MB, 在所有 Java 提交中击败了79.23%的用户
    //回溯法
    public List<List<Integer>> combinationSum3(int k, int n) {
    
    
        Deque<Integer> dp = new ArrayDeque<>();
        List<List<Integer>> res = new ArrayList<>();
        dfs(k, n, 1, dp, res);
        return res;
    }
     public void dfs(int k, int n, int tar, Deque<Integer> dp, List<List<Integer>> res) {
    
    
         if(k == 0 && n ==0){
    
    
             res.add(new ArrayList<>(dp));
             return;
         }
         if(k == 0 || n <= 0){
    
    
             return;
         }
         if(tar > 9){
    
    
             return;
         }
         //不要当前项
         dfs(k, n, tar + 1, dp, res);
         //要当前项
         dp.addLast(tar);
         dfs(k - 1, n - tar, tar + 1, dp, res);
         dp.removeLast();
         return;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38754625/article/details/108527941