LeetCode Permutations
Given a collection of numbers, return all possible permutations.
For example,
[1,2,3] have the following permutations:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2],
and [3,2,1].
排列组合问题。
方法一:递归
void dfs(vector<vector<int> >& res, vector<int>& num, int depth)
{
//递归深度depth达到了数组长度,是一种排列方式,加入结果集res
if(num.size()==depth)
{
res.push_back(num);
return ;
}
for(int i=depth; i<num.size(); i++)
{
//对于num数组中的每个元素,都与其后面所有元素一次交换位置
swap(num[depth], num[i]);
dfs(res, num, depth+1);
//交换了之后记得复原,这也是回溯(递归)最重要的一步:恢复状态
swap(num[depth], num[i]);
}
}
vector<vector<int> > permute(vector<int> &num)
{
vector<vector<int> > res;
dfs(res, num, 0);
return res;
}
本文介绍了一种解决LeetCode排列组合问题的有效方法。通过递归实现,文章详细解释了如何生成给定数字集合的所有可能排列,并附带了完整的代码示例。
272

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



