leetcode216

这道题其实是组合二的变种,限制一下填入的元素是1-9即可,简单的回溯,如果不想重复,每次都往后面更大的数取值。

class Solution {
private:
    vector>ans;
public:
    vector> combinationSum3(int k, int n) {
        dfs(vector(0),0,0,k,n);
        return ans;
    }
    
    void dfs(vectorv,int start,int tmp,int k,int n)
    {
        if(start == k)
        {
            if(tmp == n)
            {
                ans.push_back(v);
            }
        }
        else
        {
            int i = v.empty() ? 1 : v[v.size()-1]+1;
            for(;i<10;i++)
            {
                if(tmp + i <= n)
                {
                    v.push_back(i);
                    dfs(v,start+1,tmp+i,k,n);
                    v.pop_back();
                }
            }
        }
    }
};

 

你可能感兴趣的:(leetcode)