• Leetcode 31.下一个排列


    下一个排列

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

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

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

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

     

     1 public class Solution{
     2     public void nextPermutation(int[] nums){
     3         int i=nums.length-2;
     4         while(i>=0 && nums[i+1]<=nums[i])
     5             i--;
     6         if(i>=0){
     7             int j=nums.length-1;
     8             while(j>=0 && nums[j]<=nums[i]){
     9                 j--;
    10             }
    11             swap(nums,i,j);
    12         }
    13         reverse(nums,i+1);
    14     }
    15 
    16     private void reverse(int[] nums,int start){
    17         int i=start,j=nums.length-1;
    18         while(i<j){
    19             swap(nums,i,j);
    20             i++;
    21             j--;
    22         }
    23     }
    24 
    25     private void swap(int[] nums,int i,int j){
    26         int temp=nums[i];
    27         nums[i]=nums[j];
    28         nums[j]=temp;
    29     }
    30 }

     

     

  • 相关阅读:
    return跳转 和 goto跳转
    continue跳转
    break跳转
    循环的嵌套,以for循环为例
    for“列表”型循环
    do while“直到”型循环
    while“当”型循环
    选择结构 switch
    Tomcat和Servlet简析
    并发事务和隔离级别
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10162999.html
Copyright © 2020-2023  润新知