zoukankan      html  css  js  c++  java
  • 31. 下一个排列

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

    如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

    必须原地修改,只允许使用额外常数空间。

    以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
    1,2,3 → 1,3,2
    3,2,1 → 1,2,3
    1,1,5 → 1,5,1

    class Solution {
        public void nextPermutation(int[] nums) {
            //从右向左遍历,找到正序数停下,记为i - 1,i。
            //从i开始,向右遍历,找到比i - 1处大的值,swap
            //反转从i到结尾数字
            if(nums == null || nums.length <= 1) return;
            int i = nums.length - 2;
            while(i >= 0 && nums[i] >= nums[i + 1]){
                i--;
            }
            if(i >= 0){
                int j = nums.length - 1;
                while(j > i && nums[j] <= nums[i]){
                    j--;
                }
                swap(nums,i,j);    
            }
            reverse(nums,i + 1,nums.length - 1);
        }
        private void swap(int[] nums,int i,int j){
            int tem = nums[i];
            nums[i] = nums[j];
            nums[j] = tem;
        }
        private void reverse(int[] nums,int i,int j){
            while(i < j){
                swap(nums,i,j);
                i++;
                j--;
            }
        }
    }
    一回生,二回熟
  • 相关阅读:
    在jQuery中.bind() .live() .delegate() .on()的区别
    jquery小结测试题
    揭秘子类构造函数执行过程
    过滤器
    实现AJAX的基本步骤
    AJAX 原生态
    java工程师需要学什么
    Java进阶之路
    git入门大全
    轻松学JVM
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12663271.html
Copyright © 2011-2022 走看看