leetcode 216组合总和III

简介: leetcode 216组合总和III

组合总和III

833b7a43ea5c4c54880ef74c90cdfeeb.png

回溯法无减枝

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtraking(int k, int n , int sum ,int startidx)
    {
        if(path.size() == k && sum == n)
        {
            result.push_back(path);
            return;
        }else
        {
            for(int i= startidx ; i < 10 ; i++)
            {
                path.push_back(i);
                backtraking(k,n,sum+i,i+1);
                path.pop_back();
            }
            return;
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        backtraking(k,n,0,1);
        return result;
    }
};

回溯剪枝

剪枝原理同 77题

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtraking(int k, int n , int sum ,int startidx)
    {
        if(sum > n) return;
        if(path.size() == k && sum == n)
        {
            result.push_back(path);
            return;
        }else
        {
            for(int i= startidx ; i < 10 - (k - path.size()) + 1 ; i++)
            {
                path.push_back(i);
                backtraking(k,n,sum+i,i+1);
                path.pop_back();
            }
            return;
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        backtraking(k,n,0,1);
        return result;
    }
};

二刷

class Solution {
public:
    vector<vector<int>> result;
    vector<int> pathNum;
    void dfs(int k , int n , int sum ,int fir)
    {
        if(pathNum.size() == k && sum == n)
        {
            result.push_back(pathNum);
            return;
        }
        for(int i = fir ; i<=9 ; i++)
        {
            pathNum.push_back(i);
            dfs(k,n,sum+i,i+1);
            pathNum.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        dfs(k,n,0,1);
        return result;
    }
};
相关文章
|
3月前
Leetcode第40题(组合总和2)
LeetCode第40题“组合总和II”的解题方法,使用了回溯法来找出所有可能的组合,并对重复元素进行了处理。
33 0
|
3月前
【LeetCode 51】216.组合总和III
【LeetCode 51】216.组合总和III
15 1
|
3月前
【LeetCode 53】39.组合总和
【LeetCode 53】39.组合总和
42 0
|
3月前
LeetCode第39题(组合总和)
LeetCode第39题要求找出一个无重复元素整数数组中所有和为给定目标数的不同组合,可以使用回溯法解决。
55 0
|
5月前
|
算法
LeetCode第39题组合总和
LeetCode第39题"组合总和"的解题思路和技巧,采用回溯法通过递归代替多层嵌套循环,有效解决组合问题。
LeetCode第39题组合总和
|
5月前
|
算法
LeetCode第40题组合总和II
LeetCode第40题"组合总和II"的解题策略,涉及排序、去重和使用标记数组避免重复组合,通过回溯法实现递归组合。
LeetCode第40题组合总和II
|
8月前
|
Java
leetcode-377:组合总和 Ⅳ
leetcode-377:组合总和 Ⅳ
46 0
|
8月前
|
Java
leetcode-216:组合总和 III
leetcode-216:组合总和 III
41 0
|
8月前
|
Java
leetcode-40:组合总和 II
leetcode-40:组合总和 II
56 0
|
8月前
|
Java 索引
leetcode-39:组合总和
leetcode-39:组合总和
48 0