问题描述:
Given a collection of distinct numbers, return all possible permutations.
示例:
[1,2,3]
have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]问题分析:
利用回溯的算法,依次求出排列。在此过程中,设置了一个标志数组,以保证使用过的元素不被重复使用。
过程详见代码:
class Solution {
public:
vector<vector<int> > permute(vector<int>& nums) {
vector<vector<int> > res;
vector<int> re;
vector<bool> flag(nums.size(),false);
bs_permute(res,nums,re,flag);
return res;
}
void bs_permute(vector<vector<int> >& res, vector<int>& nums, vector<int>& re, vector<bool>& flag)
{
for(int i = 0; i < nums.size(); i++)
{
if(!flag[i])
{
re.push_back(nums[i]);
flag[i] = true;
if(re.size() == nums.size())
{
res.push_back(re);
}
else bs_permute(res,nums,re,flag);
re.pop_back();
flag[i] = false;
}
}
}
};