思路就是找到可以变大的最低位,进一步说,就是找到,nums[pos]满足,存在q使得,q > pos 且 nums[pos] < nums[q]。同时要注意的是,最终的答案要取q的下界。这是因为要找刚刚好比所给数字大的数字,所以我们要使得pos位,增大的尽量小。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int pos = -1;
int imax = -1, imax_pos = -1;
for (int i = nums.size() - 1; i >= 0; i --){
if(nums[i] < imax){
pos = i;
break;
}
else if (nums[i] > imax){
imax = nums[i];
imax_pos = i;
}
}
if (pos != -1){
for (int i = pos + 1; i < nums.size(); i ++){
if (nums[i] > nums[pos] && nums[i] < nums[imax_pos]){
imax_pos = i;
}
}
int t = nums[pos];
nums[pos] = nums[imax_pos];
nums[imax_pos] = t;
sort(nums.begin() + pos + 1, nums.end());
}
else{
reverse(nums.begin(), nums.end());
}
}
};