您的位置:首页 > 其它

leetcode: Next Permutation

2014-03-15 00:45 253 查看
理解9587643这个串的下一个是什么就行。

首先,从后往前找到num[i]<num[i+1]的第一个数,是5

然后从后往前找到第一个比5大的数,是6.

然后5和6换位置,得到9687543,

然后把6后面的数颠倒,9634578即可。

public class Solution {

    public void nextPermutation(int[] num) {

        int i,p1=-1,p2=-1,tmp;

        int n=num.length;

        if(n==0 || n==1)

            return;

        for(i=n-2;i>=0;i--)

        {

            if(num[i]<num[i+1])

            {

                p1=i;

                break;

            }

        }

        

        if(i==-1)

        {

            Arrays.sort(num);

            return;

        }

        for(i=n-1;i>=0;i--)

        {

            if(num[i]>num[p1])

            {

                p2=i;

                break;

            }

        }

        tmp=num[p2];

        num[p2]=num[p1];

        num[p1]=tmp;

        for(i=0;i<(n-1-p1)/2;i++)

        {

        tmp=num[p1+1+i];

            num[p1+1+i]=num[n-1-i];

            num[n-1-i]=tmp;

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode