class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
int time=1;
for(int i=1;i<=nums.size();i++)
time*=i;
vector<vector<int> > res;
res.push_back(nums);
time-=1;
for(int i=0;i<time;i++)
{
nextPermutation(nums);
res.push_back(nums);
}
return res;
}
void nextPermutation(vector<int>& nums) {
for(int i=nums.size()-2;i>=0;i--)
{
if(nums[i]<nums[i+1])
{
int j;
for(j=nums.size()-1;j>i;j--)
if(nums[j]>nums[i])
break;
swap(nums[i],nums[j]);
reverse(nums.begin()+i+1,nums.end());
return;
}
}
reverse(nums.begin(),nums.end());
}
};
Updated version
Suppose I have [1,2,3], I get 1 first, and insert 2 into and the sets become [1,2] and [2,1]. Then I insert 3 to every slot of these two sets, and they become [3,1,2],[1,3,2],[1,2,3] and [3,2,1],[2,3,1],[2,1,3].
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> > res;
vector<int> set;
int size=nums.size();
set.push_back(nums[0]);
res.push_back(set);
for(int i=1;i<size;i++)
{
int pop_num=res.size();
for(int j=0;j<pop_num;j++)
{
set=res[0];
res.erase(res.begin());
set.insert(set.begin(),nums[i]);
res.push_back(set);
for(int k=1;k<set.size();k++)
{
swap(set[k],set[k-1]);
res.push_back(set);
}
}
}
return res;
}
};