题目地址:http://www.lintcode.com/zh-cn/problem/permutations/
题解:不考虑重复的全排列,实质是对一棵树的深度优先搜索。
class Solution {
public:
/**
* @param nums: A list of integers.
* @return: A list of permutations.
*/
vector<vector<int> > permute(vector<int> &nums) {
// write your code here
vector<vector<int>> solu;
permute_d(nums, nums.size(), 0, solu);
return solu;
}
void permute_d(vector<int> &nums,int size, int n, vector<vector<int>>& solu)
{
if(n == size)
{
solu.push_back(nums);
return;
}
for(int i = n; i < size; i++)
{
Swap(nums[i], nums[n]);
permute_d(nums, size, n + 1, solu);
Swap(nums[i], nums[n]);
}
}
void Swap(int &a, int &b)
{
int t;
t = a;
a = b;
b = t;
}
};

本文介绍了一个基于深度优先搜索实现的全排列算法,并提供了详细的代码实现。通过对一棵树进行深度优先遍历来完成全排列的过程,文章中的代码示例清晰地展示了如何通过递归调用实现这一目标。
2195

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



