[leetcode]Combinations

Posted jhcelue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode]Combinations相关的知识,希望对你有一定的参考价值。

问题描写叙述:

Given two integers n and k, return all possible combinations of k 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;
    }






以上是关于[leetcode]Combinations的主要内容,如果未能解决你的问题,请参考以下文章

个人记录-LeetCode 77. Combinations

leetcode-Combinations-77

[Lintcode]152. Combinations/[Leetcode]77. Combinations

LeetCode(17)Letter Combinations of a Phone Number

leetcode17. Letter Combinations of a Phone Number

#Leetcode# 77. Combinations