[leetcode]Combinations

来源:互联网 发布:自动换刀雕刻机编程 编辑:程序博客网 时间:2024/06/05 15:38

问题描述:

Given two integers n and k, return all possible combinations ofk numbers out of 1 ... n.

For example,
If n = 4 and k = 2, a solution is:

[  [2,4],  [3,4],  [2,3],  [1,2],  [1,3],  [1,4],]

基本思想:

回溯法

代码:

 vector<int> record;         //C++    vector<vector<int> >result;    set<vector<int> > myset;    int kNum = 0;        void addSolution(){        vector<int> tmp(record.begin(),record.end());        sort(tmp.begin(),tmp.end());        if(myset.find(tmp) == myset.end()){            result.push_back(tmp);            myset.insert(tmp);           }    }    void subCombinationSum(vector<int> &cadidates,int bpos,vector<int> &base, int k){        if(kNum == k){            addSolution();        }                int size = cadidates.size();        for(int i = bpos; i < size; i++){            if(base[i] == 1)                continue;                            record.push_back(cadidates[i]);            base[i] = 1;            kNum++;            subCombinationSum(cadidates,<span style="color:#FF0000;"><strong>i+1</strong></span>,base,k);  //i+1  避免重复            record.pop_back();            base[i] = 0;            kNum--;        }    }        vector<vector<int> > combine(int n, int k) {        vector<int> candidates(n);        for(int i = 0; i < n; i++)            candidates[i] = i+1;        vector<int> base(candidates.size(),0);        subCombinationSum(candidates,0,base,k);        return result;    }


0 0
原创粉丝点击