描述:
给定一个数字列表,返回其所有可能的排列。
注意事项
你可以假设没有重复数字。
给出一个列表[1,2,3]
,其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:
1.当只有一个数时,全排列为其本身。
2.当有两个数时,选择其中一个为第一个数,全排列即可出。
3.当大于两个数时,即选择第一个数,剩下的数全排列,不断递归会达到2. 1情况,排列结束。
AC代码:
class Solution {
public:
/**
* @param nums: A list of integers.
* @return: A list of permutations.
*/
void percore(vector<int> nums,int m,int n,vector<vector<int>>&v)
{
if(m==n)
{
v.push_back(nums);
return;
}
else
for(int i=m;i<=n;i++)
{
swap(nums[i],nums[m]);
percore(nums,m+1,n,v);
swap(nums[i],nums[m]);
}
}
vector<vector<int> > permute(vector<int> nums) {
// write your code here
vector<vector<int>>v;
int j=nums.size()-1;
if(j==-1)
v.push_back(nums);
else
percore(nums,0,j,v);
return v;
}
};