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; } };