题目地址: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;
}
};