美文网首页
Leetcode-31:下一个排列

Leetcode-31:下一个排列

作者: 小北觅 | 来源:发表于2019-01-08 15:30 被阅读2次

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

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

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

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

思路:
参考下面文章:https://www.cnblogs.com/grandyang/p/4428207.html


class Solution {
    public void nextPermutation(int[] nums) {
        //1.先找到最后一个上升的位置
        int pos = -1;
        for(int i= nums.length-1; i>0 ; i--){
            if(nums[i] > nums[i-1]){
                pos = i-1;
                break;
            }    
        }
        
        //2.如果没有这样的位置,那么说明此时序列已经是逆序的了,则把此序列逆序成最小的
        if(-1==pos){
            reverse(nums,0,nums.length-1);
            return;
        }
        
        //3.存在,则找到pos之后,最后一个比他大的位置,然后交换两者
        for(int i=nums.length-1; i>pos; i--){
            if (nums[i] > nums[pos]) {
                int tmp = nums[i];
                nums[i] = nums[pos];
                nums[pos] = tmp;
                break;
            }
        }
        reverse(nums,pos+1,nums.length-1);
        
    }
    
    public void swap(int[] arr, int i, int j){
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j]=tmp;
    }
    
    // 翻转数组
    public  void reverse(int[] arr, int start, int end) {
        int l = start;
        int r = end;
        while (l < r) {
            int tmp = arr[r];
            arr[r] = arr[l];
            arr[l] = tmp;
            l++;
            r--;
        }
    }
}

相关文章

  • LeetCode-31 下一个排列

    题目:31. 下一个排列 难度:中等 分类:数组 解决方案:数组遍历 今天我们学习第31题下一个排列,这是一个中等...

  • Leetcode-31:下一个排列

    题目描述:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更...

  • 全排列系列总结

    一. 找到下一个全排列 这是给定一个排列,找它的下一个全排列 给出一个数字排列中按字典序排列的下一个更大的排列。如...

  • LeetCode 31. 下一个排列 | Python

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

  • 31. 下一个排列

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

  • 31-下一个排列

    下一个排列 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在...

  • LeetCode每日一题: 31. 下一个排列

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

  • 31. 下一个排列

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

  • 下一个排列

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

  • 下一个排列

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

网友评论

      本文标题:Leetcode-31:下一个排列

      本文链接:https://www.haomeiwen.com/subject/gaxbrqtx.html