博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode — next-permutation
阅读量:6245 次
发布时间:2019-06-22

本文共 2494 字,大约阅读时间需要 8 分钟。

import java.util.Arrays;/** * Source : https://oj.leetcode.com/problems/next-permutation/ * * Created by lverpeng on 2017/7/13. * * * 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 * */public class NextPermutation {    /**     * 寻找多个数字组成的数字序列中的下一个,比如:1,2,3组成的序列     * 123,132,213,231,312,312     *     * 规律如下:     * 从右向左找到第一个num[i] > num[i-1]     * 然后从右向左找到第一个num[k] > num[i-1]     * 交换两个位置     * 对num[i-1]后面元素排序     *     * 边界条件:i = 1的时候还没找到num[i-1]就把整个数字的各个位翻转顺序     *     *     * @param num     * @return     */    public void nextPermutation (int[] num)  {        for (int i = num.length - 1; i > 0; i--) {            if (num[i] > num[i-1]) {                int k = num.length - 1;                while (num[i-1] > num[k]) {                    k --;                }                // swap                int temp = num[i-1];                num[i-1] = num[k];                num[k] = temp;                reverse(num, i, num.length - 1);                return ;            }            // 边界情况,已经是最大了,转化为最小            if (i == 1) {                reverse(num, 0, num.length - 1);                return ;            }        }    }    private void reverse (int[] arr, int start, int end) {        if (start < 0 || end > arr.length - 1 || start > end) {            return;        }        while (start < end) {            int temp = arr[start];            arr[start] = arr[end];            arr[end] = temp;            end --;            start ++;        }    }    public static void main(String[] args) {        NextPermutation nextPermutation = new NextPermutation();        int[] arr1 = new int[]{1, 2, 3, 4};        nextPermutation.nextPermutation(arr1);        System.out.println(Arrays.toString(arr1));        int[] arr2 = new int[]{1, 3, 2, 4};        nextPermutation.nextPermutation(arr2);        System.out.println(Arrays.toString(arr2));        int[] arr3 = new int[]{4,3,2,1};        nextPermutation.nextPermutation(arr3);        System.out.println(Arrays.toString(arr3));    }}

转载于:https://www.cnblogs.com/sunshine-2015/p/7426311.html

你可能感兴趣的文章
iOS完整学习路线图
查看>>
JAVA_Thread_生产消费模式
查看>>
IceCTF-Matrix
查看>>
java.util.HashSet源码分析
查看>>
yield与yield from
查看>>
两数相加LeetCode
查看>>
c/c++ 获取文件夹或目录下的文件
查看>>
bzoj3316: JC loves Mkk(单调队列+分数规划)
查看>>
P4046 [JSOI2010]快递服务
查看>>
8分钟学会使用AutoMapper
查看>>
使用weka训练一个分类器
查看>>
C#根据WSDL文件生成WebService服务端代码
查看>>
[FJOI2018]领导集团问题
查看>>
thinkphp用ajax遇到的坑——ajax请求没有反应
查看>>
Microsoft Visual Studio 中出现 Windows has triggered a breakpoint in xxx.exe的一个解决方案
查看>>
非常直白的 js 闭包概念.<转载>
查看>>
shared_ptr模版推导的问题
查看>>
mac下用ruby安装sass && webstorm下给scss文件添加watch
查看>>
前端Demo常用库文件链接
查看>>
react create-react-app 跨域
查看>>