代码改变世界

全排列

2017-08-06 23:33  1500802028  阅读(186)  评论(0编辑  收藏  举报

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

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

截图: