时间复杂度(O(n*n!))
class Solution {
public:
bool nextPermutation(vector<int>& nums) {
bool mark=true;
for(int i=1;i<nums.size();++i)
if(nums[i-1]<nums[i]){
mark = false;
break;
}
if(mark==true) return false;
int remainSite = -1;
for(int j=nums.size()-1;j>0;--j){
if(nums[j]>nums[j-1]){
remainSite = j;
break;
}
}
int startIndex=remainSite;
int endIndex=nums.size()-1;
while(startIndex<endIndex){
int tmp = nums[startIndex];
nums[startIndex++]=nums[endIndex];
nums[endIndex--]=tmp;
}
for(int i=remainSite;i<nums.size();++i){
if(nums[remainSite-1]<nums[i]){
int tmp = nums[remainSite-1];
nums[remainSite-1] = nums[i];
nums[i] = tmp;
return true;
}
}
return true;
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> numss;
if(nums.size()<2){
numss.push_back(nums);
return numss;
}
for(int i=0;i<nums.size();++i){
for(int j=0;j<nums.size()-1-i;++j){
if(nums[j]>nums[j+1]){
int tmp = nums[j];nums[j]=nums[j+1];nums[j+1]=tmp;
}
}
}
do {
numss.push_back(nums);
} while(nextPermutation(nums));
return numss;
}
};