31. 下一个排列

自己做
解:排序实现

class Solution {
public: void nextPermutation(vector<int>& nums) {int nums_len = nums.size();if(nums_len == 1) //只有一个元素不处理,直接返回return;int i = nums_len - 2; //前一元素int j = nums_len - 1; //后一元素//找到前一元素比后一元素小的元素while(i >= 0 && nums[i] >= nums[j]){j = i;i--; //前移}//这里要么发现了前一元素(i = xxx)比后一元素小,要么整个数组都是倒序的(i = -1)//倒序的情况if(i == -1) //如果数组是倒序的return sort(nums.begin(), nums.end()); //升序排序//找到比i大的最小值(从j往后的位置)//将i往后的元素重新排为升序vector<int>::iterator it = nums.begin();for(int z = 0; z < i + 1; z++) //找到i+1位置的指针it++;sort(it,nums.end()); //排序i+1往后的元素(升序)for(int z = j; z < nums_len; z++)if(nums[z] > nums[i]){ //找到了//交换元素int temp = nums[z];nums[z] = nums[i];nums[i] = temp;break;}//交换后重新排序sort(it,nums.end()); //排序i+1往后的元素(升序)}
};
