leetcode31. Next Permutation
来源:互联网 发布:网络建设与管理方案 编辑:程序博客网 时间:2024/05/20 03:05
Next Permutation
参考:https://yq.aliyun.com/articles/863
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
解题思路:把这个题想成是求数组中的元素所组成的数中比比当前数大的一个最小数,这个就容易理解了,从后后往前找,找到第一个递增的位置i<j,在j以后的数列全部是递减的,找到比i大的数中最小的与i互换位置,然后将j以后的数列变为递增。此时就得到结果了。
package leetcode;import java.util.Arrays;public class leet31 {public static void main(String[] args) {int[] nums = { 3, 2, 1 };leet31 leet = new leet31();leet.nextPermutation(nums);} public void nextPermutation(int[] nums) {int i;for (i = nums.length - 1; i > 0; i--) {//从后往前遍历,找到递增位置iif (nums[i] > nums[i - 1]) {for (int j = i; j < nums.length; j++) {//从递增的位置往后找到比i大的数中的最小数if (j == nums.length - 1) {//数列全部递增时int tmp = nums[i - 1];nums[i - 1] = nums[j];nums[j] = tmp;} else if (nums[j] > nums[i - 1] && nums[j + 1] < nums[i - 1]) {int tmp = nums[i - 1];nums[i - 1] = nums[j];nums[j] = tmp;for (int low = i - 1 + 1, high = nums.length - 1; low < high; low++, high--) {//i位置后的递减序列变递增int temp = nums[low];nums[low] = nums[high];nums[high] = temp;}}}System.out.println(Arrays.toString(nums));return;}}if (i == 0) {Arrays.sort(nums);System.out.println(Arrays.toString(nums));}}}
0 0
- [LeetCode31]Next Permutation
- LeetCode31:Next Permutation
- Leetcode31 Next Permutation
- LeetCode31 Next Permutation
- leetcode31:Next Permutation
- leetcode31---Next Permutation
- Leetcode31 Next Permutation
- LeetCode31. Next Permutation
- leetcode31. Next Permutation
- leetcode31~Next Permutation
- LeetCode31. Next Permutation
- Leetcode31. Next Permutation
- leetcode31. Next Permutation
- LeetCode31. Next Permutation
- leetcode31 Next Permutation
- Leetcode31 Next Permutation
- leetcode31. Next Permutation
- LeetCode31. Next Permutation最清晰的解法
- 【腾讯TMQ】看图测试指南——图像识别在测试中的应用
- 安卓资源文件中常用符号
- poj 1458 Common Subsequence(lcs)
- Nmap扫描多网段时的坑
- 防守阵地 II
- leetcode31. Next Permutation
- 1058. 选择题
- ArrayList和LinkedList的算法实现和区别
- 一致性hash-java实现treemap版
- SpringMVC 学习 03 - spring mvc的获取参数和传递参数
- 关于mysql index
- 三色警示灯M4 ONLION内部电参数详解
- java.lang.Object cannot be resolved. It is indirectly referenced from
- GreeDao基础使用