首页 > 其他 > 详细

Next Permutation

时间:2015-08-31 23:03:41      阅读:259      评论:0      收藏:0      [点我收藏+]

感觉又是一道智商题啊,方法比较难以想到,想到后就容易了,没有自己写代码,直接看的网上的答案·················································

题意寻找比当前排列顺序大的下一个排列。

1)因为降序序列是没法变的更大的,所以从后往前找到第一个升序对的位置。

2)然后就存在调整大小排列顺序的可能,从后往前找到比当前位置大的元素,交换之。

3)当前位置后面的元素还是降序排列,将他们反转得到最小顺序排列。其实就是原来当前位置元素后面是最大的排列,而交换后的新元素之后是最小的排列,他们就是相邻的顺序。

当不存在升序,则当前排列是最大排列,只要旋转整个序列变成最小排列。

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

  

Next Permutation

原文:http://www.cnblogs.com/qiaozhoulin/p/4774229.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!