LeetCode 31 Next Permutation

来源:互联网 发布:centos libssl dev 编辑:程序博客网 时间:2024/06/13 13:03

题意:举个栗子

123 

132

213

231

312

321

如上所示,题目的意思是,从上面的某一行重排到期下一行,如果已经是最后一行了,则重排成第一行。

先从后往前看,直到某一个值大于它的前一个值,这个值(位置表示为length)的前一个值就是要替换的。接下来在length-1之后的所有比length-1的值大的值中找出最小的,二者交换。这个过程由于后面一定是递减的,所以从最后开始找第一个大于length-1的值与其交换。再将交换位置后的值进行升序排列。这里由于后面的值都是递减的,所以将length及之后的值按第一个与最后一个交换,第二个与倒数第二个交换...实现方法是length和last两个指针,交换一次后length++,last--。直到跳出循环(length<last)。代码如下:

class Solution {
    public void nextPermutation(int[] nums) {
        int length = nums.length - 1;
        while (length > 0){
            if (nums[length] > nums[length - 1])
            break;                
            --length;
        }
        if (length == 0) {
            Arrays.sort(nums);  
        }else{
            int j = nums.length - 1;
            for (; j > length; j--) {
            if (nums[j] > nums[length - 1]) 
            break;
            }
            swap(nums, length - 1, j);
            int last = nums.length - 1;
        int i = length;
            while (i < last){
            swap(nums, i, last);
                i++;
                last--;
            }
        }
    }
    
    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 绿萝花的功效与作用 绿萝冬天怎么养 绿萝有种子吗 绿萝品种有哪些 绿萝盆栽怎么养 绿萝会开花吗 绿萝是什么样子的 怎样让绿萝疯长 绿萝盆栽图片 水养绿萝窍门 绿萝可以水培吗 绿萝如何扦插 养绿萝用什么土 绿萝上什么肥料好 绿萝吊兰盆栽 绿萝怎么分盆 绿萝种植基地 如何栽培绿萝 如何让绿萝快速长藤 绿萝怎么样养 绿萝一盆多少钱 卧室可以放绿萝吗 怎么养绿萝才茂盛 盆栽绿萝怎么养 大叶绿萝怎么养 绿萝土培方法 绿萝花多少钱一斤 绿萝花怎么养 绿萝花的价格 绿萝花的样子 室内盆栽绿萝 绿萝怎么扦插土培 绿萝花的作用 碧萝图片 为什么说一颗绿萝7个鬼 家里为什么不能放绿萝 绿营 台湾绿营 蓝营和绿营 绿营蓝营 绿藻