给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
思路:
采用递归的搜索算法来处理这道题。递归函数有这样几个参数:保存最终答案的数组ans,保存每次答案的数组every,保存本次递归开始位置的begin,保存当前已有数字数量的f,以及题目所给的n和k。在每次递归中进行遍历,从begin开始遍历一直到最大值n,每次遍历进行一次递归,开始位置为当前位置加一,更改every数组对应数的值,并且将f加一,递归结束之后还原。一旦f与所需k相同,就将结果返回。
代码:
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<int> every(k);
vector<vector<int>> ans;
int f=0;
everycombine(ans,every,1,n,k,f);
return ans;
}
void everycombine(vector<vector<int>>& ans, vector<int>& every, int begin, int n, int k,int& f)
{
if(f==k)
{
ans.push_back(every);
return;
}
for(int i=begin;i<=n;i++)
{
every[f]=i;
f++;
everycombine(ans,every,i+1,n,k,f);
f--;
}
}
};
该博客探讨了如何使用递归算法解决寻找整数n中任意k个数的组合问题。给出了详细的递归函数实现,包括关键参数的解释和递归过程的描述。示例展示了当n=4,k=2时的输出结果。
538

被折叠的 条评论
为什么被折叠?



