leetcode216

這道題其實是組合二的變種,限制一下填入的元素是1-9即可,簡單的回溯,如果不想重複,每次都往後面更大的數取值。

class Solution {
private:
    vector<vector<int>>ans;
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        dfs(vector<int>(0),0,0,k,n);
        return ans;
    }
    
    void dfs(vector<int>v,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();
                }
            }
        }
    }
};

 

發佈了457 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章