Given a collection of distinct integers, return all possible permutations.
Example:
Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
给出一串数字,没有重复数字,返回它的所有排列。这道题跟31.Next Permutations的解决方法基本一致。
先将数字从小到大排列,然后将数字从最小序列排到最大序列。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> r;
bool flag = true;
int index = -1;
sort(nums.begin(),nums.end());
r.push_back(nums);
while(flag){
flag = false;
index = -1;
for(int i=nums.size()-1;i>=1;i--){
if(nums[i]>nums[i-1]){
flag = true;
index = i-1;
break;
}
}
if(index >= 0){
for(int i=nums.size()-1;i>=index+1;i--){
if(nums[i]>nums[index]){
swap(nums[i],nums[index]);
break;
}
}
sort(nums.begin()+index+1,nums.end());
r.push_back(nums);
}
}
return r;
}
};