题目:给定一个数字列表,返回其所有可能的排列
给出一个列表[1,2,3]
,其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:nums=[1,2,3,4]求全排列,有四个位置,当第一个元素为1时,相当于求2,3,4的全排列,而在此排列中,当2为第一个元素时,相当于求3,4的全排列,又可以继续划分,3为第一个元素,4本身为一个全排列,
代码:
void per(vector<int> nums,int start,vector<vector<int> > &result){
if(start==nums.size()-1){
result.push_back(nums);
}
else{
for(int i=start;i<nums.size();i++){
swap(nums[start],nums[i]);
per(nums,start+1,result);
swap(nums[start],nums[i]);
}
}
}
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> > result;
if(nums.size()==0){
result.push_back(nums);
return result;
}
per(nums,0,result);
return result;
}
};
截图: