赞
踩
就是要找这堆数字的组合中下一个较大的数,比如1243的下一个排列是1342,那怎么得到的,就是把大数放前面小数放后面这个数自然就大了,如果要接近的大,那么应该从最右边开始找一个更小一点的数,然后找第二小的数,把第二小的数和第一小的数交换
如果找到一个小的,那么说明右边的都是降序排序好的了,第二小的就是从右边开始找到第一个比刚刚找到的小数大的,并且交换之后还需要重新升序排序一下后面部分的,让这个大数变小一些
- class Solution {
- public:
- void nextPermutation(vector<int> &nums) {
- int small = nums.size() - 2;
- while (small >= 0 && nums[small] >= nums[small + 1])
- small--;
- int big = nums.size() - 1;
- if (small >= 0) { // 交换小的和较大的
- while (nums[big] <= nums[small])
- big--;
- swap(nums[big], nums[small]);
- }
- reverse(nums.begin() + small + 1, nums.end());
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。