全排列

题目:给定一个数字列表,返回其所有可能的排列

给出一个列表[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;
}
};

截图:

原文地址:https://www.cnblogs.com/w1500802028/p/7296475.html