给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int fac(int x) //递归函数
{
int f;
if(x==0 || x==1)
f=1;
else
f=fac(x-1)*x;
return f;
}
vector<int> getnext(vector<int>& nums)
{
int size = nums.size();
if(size <= 1)
return;
int i = 0;
int j = -1;
int k = -1;
for(i=size-1; i>=0; i--)
{
if(i-1 >= 0)
{
if(nums[i]>nums[i-1])
{
j=i-1;
break;
}
}
}
if(j == -1)
{
sort(nums.begin(), nums.end());
return;
}
cout<<j<<endl;
//return;
for(i=size-1; i>=0; i--)
{
if(nums[i]>nums[j])
{
k=i;
break;
}
}
int tmp = nums[j];
nums[j] = nums[k];
nums[k] = tmp;
for(i=size-1, j=j+1; j<i; i--,j++)
{
int tmp1 = nums[j];
nums[j] = nums[i];
nums[i] = tmp1;
}
return nums;
}
vector<vector<int>> permute(vector<int>& nums)
{
vector<vector<int>> ret;
sort(nums.begin(), nums.end());
vector<int> tmp = nums;
ret.push_back(tmp);
int times = fac(nums.size());
//cout<<"times ="<<times<<endl;
//
int i = 0;
for(i=1; i<times; i++)
{
tmp = getnext(tmp);
ret.push_back(tmp);
//return ret;
}
return ret;
}
};