下一个排列
Posted 上善若水的爹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下一个排列相关的知识,希望对你有一定的参考价值。
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
解答:
/** * [1,2,3] 的字典序是[1,2,3];[1,3,2];[2,1,3];[2,3,1];[3,1,2];[3,2,1];这样的 * @param nums */ public static void nextPermutation(int[] nums) { /*当数组为null或元素小于1时直接返回*/ if (nums == null || nums.length < 2) { return; } int length = nums.length; int c = length - 2; /*找出前一个元素比后一个元素小的下标*/ while (c >= 0 && nums[c] >= nums[c + 1]) { c--; } /*当存在前一个元素比后一个元素小的下标*/ if (c >= 0) { int in = length - 1; /*从数组末尾找到第一个比c大的元素下标*/ while (in >= 0 && nums[in] <= nums[c]) { in--; } /*暂存c下标对应的值*/ int tmp = nums[c]; /*c下标赋值in对应的值*/ nums[c] = nums[in]; /*in下标赋值暂存c对应的值*/ nums[in] = tmp; } /*从c+1开始,数组末尾截止,把元素翻转*/ int start = c + 1; int end = length - 1; while (start < end) { int tmp = nums[start]; nums[start] = nums[end]; nums[end] = tmp; start++; end--; } }
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-permutation
以上是关于下一个排列的主要内容,如果未能解决你的问题,请参考以下文章
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途