leetcode 39 組合總和

### 題目

給定一個無重複元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和爲 target 的組合。

candidates 中的數字可以無限制重複被選取。

說明:

所有數字(包括 target)都是正整數。
解集不能包含重複的組合。 
示例 1:

輸入: candidates = [2,3,6,7], target = 7,
所求解集爲:
[
  [7],
  [2,2,3]
]
示例 2:

輸入: candidates = [2,3,5], target = 8,
所求解集爲:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]

### 思路

        依然是利用回溯法,設置一個數組temp用來存儲數字組合,首先將candidates的第一個數字放進temp當中,然後再在candidates中尋找下一個放入temp當中的數字,然後再將target減去放入的數字 這裏注意,因爲可以重複,所以依然是可以將candidates的第一個數字放入,然後依次這樣放入數字,直到target等於0,證明找到了一個合理的組合,添加入最後結果當中。

### code

    

class Solution {
    public:
        void add(int index,vector<int>& candidates,vector<int>& temp,int target,vector<vector<int>>& res)
        {
            if(target<=0)
            {
                if(target==0)
                {
                    res.push_back(temp);
                    
                }
                return ;
            }
           // cout<<1;
            for(int i=index;i<candidates.size();++i)
            {
                temp.push_back(candidates[i]);
                add(i,candidates,temp,target-candidates[i],res);
                temp.pop_back();
            }
            //cout<<2;
            return ;
        }
        vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
            vector<vector<int>>res;
            vector<int>temp;
            add(0,candidates,temp,target,res);
            return res;
        }
    };

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章