1. 程式人生 > 其它 >leetcode-backtrack-40. 組合總和 II

leetcode-backtrack-40. 組合總和 II

參考:

https://leetcode-cn.com/problems/combination-sum-ii/solution/hui-su-suan-fa-jian-zhi-python-dai-ma-java-dai-m-3/

class Solution {
public:
    vector<vector<int>> res;
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        vector<int> temp;
        sort(candidates.begin(),candidates.end());
        
// for(int i = 0; i < candidates.size(); i++){ // cout<<"i_"<<i<<" "<<candidates[i]<<endl; // } dfs(candidates,target,0,temp); // if(res.size()==0) // return res; // sort(res.begin(), res.end()); // res.erase(unique(res.begin(), res.end()), res.end());
return res; } void dfs(vector<int>& candidates,int target, int index, vector<int> &temp){ // for(int i = 0; i < candidates.size(); i++){ // cout<<"i_"<<i<<" "<<candidates[i]<<endl; // } // return;
if(target==0){ res.push_back(temp); return; } if(target<0) return; for(int i = index; i < candidates.size(); i++){ // 去除排序後的candidate中同一層次的相同變數,可以避免重複,這句太經典了 // 前提是排序,i>index 是因為從自身後面一位開始判斷重複 if(i > index&&candidates[i]==candidates[i-1]) continue; temp.push_back(candidates[i]); dfs(candidates,target-candidates[i],i+1,temp); temp.pop_back(); } } };