记住方法就可以,找到第一个nums[i] < nums[i+1] 的位置 i
然后从i+1往后扫,找到第一个小于nums[i]的位置 j,
最后swap(nums[i], nums[j-1]), 然后将 i 后面排序
重点是判断时一定都要加等于号。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
if(nums.size() <= 1) return;
int i=nums.size()-1;
while(i > 0 && nums[i] <= nums[i-1]) i--;
if(i == 0){
reverse(nums.begin(), nums.end());
return;
}
i--;
int j = i+1;
for(; j<nums.size(); j++){
if(nums[j] <= nums[i]) break;
}
j--;
swap(nums[i], nums[j]);
sort(nums.begin()+i+1, nums.end());
}
};
网友评论