void nextPermutation(vector<int>& nums) {
if(nums.size()==1)return;
vector<int> back;
int i=nums.size()-1;
do{
back.push_back(nums[i]);
i--;
}while(i>=0 && nums[i]>=nums[i+1]);
vector<int>::iterator iter = upper_bound(back.begin(), back.end(), nums[i]);
if(i==-1){
sort(back.begin(),back.end());
for(i=i+1;i<nums.size();++i){
nums[i] = back[0];
back.erase(back.begin());
}
return;
}else{
int tmp = nums[i];
nums[i] = *iter;
*iter = tmp;
sort(back.begin(),back.end());
for(i=i+1;i<nums.size();++i){
nums[i] = back[0];
back.erase(back.begin());
}
}
}
leetcode 31. Next Permutation
最新推荐文章于 2021-05-21 19:06:52 发布