31. Next Permutation

来源:互联网 发布:ug8.0车削加工编程 编辑:程序博客网 时间:2024/06/04 19:58

这道题让我们求下一个排列顺序。

写几个例子就能看出,应该从后往前遍历字符串,碰到第一个下降的数,就把他和他后面大于他的最小的数交换。但是交换之后!!!要把他位置上新的数之后的数翻转!!

class Solution {public:    void nextPermutation(vector<int>& nums) {        int i, j, n = nums.size();        for (i = n - 2; i >= 0; --i) {            if (nums[i + 1] > nums[i]) {                for (j = n - 1; j >= i; --j) {                    if (nums[j] > nums[i]) break;                }                swap(nums[i], nums[j]);                reverse(nums.begin() + i + 1, nums.end());                return;            }        }        reverse(nums.begin(), nums.end());    }};