[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
[Lintcode]152. Combinations/[Leetcode]77. Combinations
LeetCode(17)Letter Combinations of a Phone Number