您的位置:首页 > 其它

77. Combinations

2016-05-22 10:16 190 查看
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],
]

题意:给出n和k,输出1-n之间的长度为k的组合。
思路:递归。中间进行了数组的复制,beats 3.57%

class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<int> tmp;
vector<vector<int>> res;
recursion(n, k, tmp, res);
return res;
}
void recursion(int n, int k, vector<int> tmp, vector<vector<int>>&res){
if (tmp.size() == k){
res.push_back(tmp);
return;
}
if (tmp.empty()){
for (int i = 1; i <= n; i++){
vector<int> myvec;
myvec.push_back(i);
recursion(n, k, myvec, res);
}
}
else{
int begin = tmp[tmp.size() - 1];
for (int i = begin + 1; i <= n; i++){
vector<int> myvec(tmp);
myvec.push_back(i);
recursion(n, k, myvec, res);
}
}
}
};

思路2:回溯,beats: 27.43%

class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<int> tmp;
vector<vector<int>> res;
recursion(n, k, tmp, res);
return res;
}
void recursion(int n, int k, vector<int>& tmp, vector<vector<int>>&res){
if (tmp.size() == k){
res.push_back(tmp);
return;
}
if (tmp.empty()){
for (int i = 1; i <= n; i++){
tmp.push_back(i);
recursion(n, k, tmp, res);
tmp.pop_back();
}
}
else{
int begin = tmp[tmp.size() - 1];
for (int i = begin + 1; i <= n; i++){
tmp.push_back(i);
recursion(n, k, tmp, res);
tmp.pop_back();
}
}
}
};
思路3:更好的剪枝处理,beats: 79.80%

class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<int> tmp;
vector<vector<int>> res;
recursion(n, k, tmp, res);
return res;
}
void recursion(int n, int k, vector<int>& tmp, vector<vector<int>>&res){
if (tmp.size() == k){
res.push_back(tmp);
return;
}
if (tmp.empty()){
for (int i = 1; i <= n-k+1; i++){
tmp.push_back(i);
recursion(n, k, tmp, res);
tmp.pop_back();
}
}
else{
int begin = tmp[tmp.size() - 1];
for (int i = begin + 1; i <= n-(k-tmp.size())+1; i++){
tmp.push_back(i);
recursion(n, k, tmp, res);
tmp.pop_back();
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: