很基礎的一道DFS,開始的時候覺得可能剪枝要處理的好一些,於是我的剪枝是:如果當前的值合適,那麼剩下的和一定要大於剩下的個數*1&&小於剩下的個數*9,這雖然不是最優,但是處理起來比較簡單,沒想到樣例只有18組,跑了0ms,數據太水了。
class Solution { private: vector< vector>ans; vector v; public: void dfs(int num,int left,int cur) // 剩下的個數,剩下的值,當前值 { if(num==0&&left==0) { ans.push_back(v); } for(int i=1;i<=9;i++) { if(i>cur&&left>=i&&left>=num&&left<=num*9) { v.push_back(i); dfs(num-1,left-i,i); v.pop_back(); } } } vector< vector > combinationSum3(int k, int n) { dfs(k,n,0); return ans; } };