zoukankan      html  css  js  c++  java
  • LeetCode: 31. Next Permutation (Medium)

    1. 原题链接

    https://leetcode.com/problems/next-permutation/description/

    2. 题目要求

    给出一个整型数组,让我们给出下一个排序情况。注意以下规则:

    (1)下一个排列必须比原排列要大。例如“1,2,4,5,3”,下一个排列为“1,3,4,5,2”,比之前的排列要大;

    (2)如果给出的数组已经按降序排列则下一个排列必须是升序排列。例如“5,4,3,2,1”为降序,下一个排列必须为升序“1,2,3,4,5”;

    全排列概念:

    3. 解题思路

    从后向前找到,前一个元素 nums[ i ] 小于后一个元素 nums[ i+1 ] 的位置。然后在从后向前找到 刚好大于nums[ i ] 的元素 nums [ j ],交换 nums[ i ] 和 nums[ j ] 。最后将nums[ i ] 之后的元素进行逆置。

    4. 代码实现

     1 public class NextPermutation31 {
     2     public static void main(String[] args) {
     3         int[] nums ={1,2,4};
     4         NextPermutation31 np =new NextPermutation31();
     5         for(int x:np.nextPermutation(nums))
     6             System.out.println(x);
     7 
     8     }
     9     public int[] nextPermutation(int[] nums) {
    10 
    11         int i = nums.length - 2;
    12         while (i >= 0 && nums[i + 1] <= nums[i]) {
    13             i--;
    14         }
    15 
    16         if (i >= 0) {
    17             int j = nums.length - 1;
    18             while (j >= 0 && nums[j] <= nums[i]) {
    19                 j--;
    20             }
    21             swap(nums, i, j);
    22         }
    23         reverse(nums,i+1,nums.length-1);
    24 
    25         return nums;
    26 
    27     }
    28 
    29     public void swap(int[] nums, int i, int j) {
    30         int temp = nums[i];
    31         nums[i] = nums[j];
    32         nums[j] = temp;
    33     }
    34 
    35     public void reverse(int[] nums, int start, int end) {
    36         while (start < end) {
    37             swap(nums, start, end);
    38             start++;
    39             end--;
    40         }
    41     }
    42 
    43 }
  • 相关阅读:
    C#--带参SQL语句数通用数据访问类
    VS 2017产品密匙
    关于编码中的字符和字节问题
    关于C++中的cin用法
    C++基础(一、基本语法,Hello World)
    Oracle查看用户所在的表空间
    静态变量、枚举、以及静态代码块的使用场景
    Java 枚举(enum) 详解7种常见的用法
    第一章 对象和封装
    摘抄Java反射
  • 原文地址:https://www.cnblogs.com/huiAlex/p/8184149.html
Copyright © 2011-2022 走看看