leetcode - Next Permutation

来源:互联网 发布:司马迁 知乎 编辑:程序博客网 时间:2024/05/16 08:23

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place, do not allocate extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

//这题的意思是给出一组数据,求出这个数据下一个字典序排列,可以按照如下的方法得到nextPermutation.//第一种情况,首先,假设数组为num,当前遍历的结点为k,如果,k前面的结点s < k 则将从k到数组的最后一个元素(包含k),找到一个最小大于s的结点n.//然后,swap(s,n),并且排序k到最后一个元素.第二种情况,如果这组数据是逆序的,那么,只要将数据升序排列就可以得到结果了。class Solution {public:    void nextPermutation(std::vector<int> &num) {int i,j;for (i = num.size() - 1; i > 0 ; i--){if(num[i] > num[i-1]){j = i;while(j < (int)num.size() && num[j] > num[i-1]) j++;std::swap(num[j-1],num[i-1]);std::sort(num.begin()+i,num.end());break;}}if(i == 0)std::sort(num.begin(),num.end());#if 1for(std::vector<int>::iterator it = num.begin(); it != num.end(); it++){std::cout << *it << " ";}std::cout << std::endl;#endif // 1    }};


0 0
原创粉丝点击