class Solution {
public:
void nextPermutation(vector<int>& nums) {
int len=nums.size(), i=len-1;
while(i>0 && nums[i-1]>=nums[i])
--i; //i为从后向前开始下降的起点
int j=len-1;
if(i>0){ //注意i可能等于0,这样nums[i-1]就越界了
while(j>i && nums[j]<=nums[i-1])
--j;
swap(nums[i-1], nums[j]);
}
for(j=i;j<(len+i)/2;++j){
swap(nums[j],nums[len-1+i-j]); //在i~len-1之间翻转
}
}
};
STL中的函数:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
next_permutation(nums.begin(), nums.end());
}
};