码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]31. Next Permutation下一个排列

时间:2019-01-28 23:05:46      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:int   mem   const   wap   asc   graph   star   ati   leetcode   

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 and use only constant 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,31,3,2
3,2,11,2,3
1,1,51,5,1

 
题目要求把一个序列改变成一个紧接着的,比它大的序列,对于这样的题目,我们可以来找下规律,假设最小序列1234
1,2,3,4
1,2,4,3
1,3,2,4
1,3,4,2
1,4,2,3
1,4,3,2
2,1,3,4
2,1,4,3
 
从上往下看,在以1开头的序列中,我么每次调换的位置都出存在逆序数的情况,从后往前,我们是把逆序开始位置上的数和比它稍大的数进行了替换,得到的稍大的序列
public class Solution {
    public void nextPermutation(int[] nums) {
        int i = nums.length - 2;
        while (i >= 0 && nums[i + 1] <= nums[i]) {
            i--;
        }
        if (i >= 0) {
            int j = nums.length - 1;
            while (j >= 0 && nums[j] <= nums[i]) {
                j--;
            }
            swap(nums, i, j);
        }
        reverse(nums, i + 1);
    }

    private void reverse(int[] nums, int start) {
        int i = start, j = nums.length - 1;
        while (i < j) {
            swap(nums, i, j);
            i++;
            j--;
        }
    }

    private void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

 

[LeetCode]31. Next Permutation下一个排列

标签:int   mem   const   wap   asc   graph   star   ati   leetcode   

原文地址:https://www.cnblogs.com/jchen104/p/10332056.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!