LeetCode216. 組合總和 III
阿新 • • 發佈:2018-12-26
找出所有相加之和為 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]]
題目分析:DFS,為避免重複組合,規定數字只能往後取。例如,當前取了數字2,那麼下一個數只能取2之後的數字。
程式碼展示:
class Solution { public: vector<vector<int>> combinationSum3(int k, int n) { vector<int> path; vector<vector<int>> ans; int depth = 0; int sum = 0; int index = 1; dfs(k,n,index,sum,depth,path,ans); return ans; } void dfs(int k,int n,int index,int sum,int depth,vector<int>& path,vector<vector<int>>& ans){ if(depth==k && sum==n){ ans.push_back(path); return; } if(depth>=k) return; for(int i=index;i<10;i++){ if(sum+i<=n){ path.push_back(i); dfs(k,n,i+1,sum+i,depth+1,path,ans); path.pop_back(); //回溯 } } } };