2.给定任意一个自然数,获取它重新排列后,下一个比它大的自然数,要求时间复杂度O(n)。例如: 给定1233,它的下一个是1323; 给定1323,它的下一个是1332

简介: 2.给定任意一个自然数,获取它重新排列后,下一个比它大的自然数,要求时间复杂度O(n)。例如: 给定1233,它的下一个是1323; 给定1323,它的下一个是1332

一、题目

给定任意一个自然数,获取它重新排列后,下一个比它大的自然数,要求时间复杂度O(n)。例如:        

给定1233,它的下一个是1323;        

给定1323,它的下一个是1332;

这是一道面试题,不理解的可以去研究一下字典序算法。

二、代码

public class Test2 {
  public static void main(String[] args) {
    int a=443854489;
    String result=renew(a);
    System.out.println(result);
  }
  public static String renew(int a) {
    String aString=String.valueOf(a);
    String[] arr=aString.split("");
    int[] arr2=new int[arr.length];
    for(int i=0;i<arr.length;i++) {
      arr2[i]=Integer.parseInt(arr[i]);
    }
    //num为交换的位置
    int num=0;
    for(int i=arr2.length-1;i>0;i--) {
      if(arr2[i]>arr2[i-1]) {
        num=i;
        break;
      }
      if(i==1) {
        return "它的下一个不存在";
      }
    }
    //交换位置右边的数刚好大于它前一位交换位置
    for(int i=arr2.length-1;i>=num;i--) {
      if(arr2[num-1]<arr2[i]) {
        int temp=arr2[num-1];
        arr2[num-1]=arr2[i];
        arr2[i]=temp;
        break;
      }
    }
    //对num右边的数进行排序,由于第一次找num时就保证了右边比左边小,所以只需要倒序一下就好了
    for(int i=num,j=arr2.length-1;i<j;i++,j--) {
      int temp=arr2[i];
        arr2[i]=arr2[j];
        arr2[j]=temp;
      }
    String result="";
    for (int i : arr2) {
      result=result+i;
    }
    return "它的下一个是"+result;
  }
}
目录
相关文章
|
6月前
给定一个长度为n的数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数、偶数部分进行排序
给定一个长度为n的数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数、偶数部分进行排序
56 1
|
2月前
|
存储 C语言 Python
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
313 4
|
6月前
|
机器学习/深度学习 算法 测试技术
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
|
5月前
|
C++
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
|
存储 索引
信息学奥赛 如何在整数数组中寻找两数之和等于给定目标值
本文介绍了在整数数组中寻找两个数之和等于给定目标值的问题,提供了两种解法:暴力法和哈希表法。通过比较两种解法的时间复杂度,指出了哈希表法更为高效。
115 0
|
存储
[递推]双幂序列、多幂序列、双幂积序列的和
[递推]双幂序列、多幂序列、双幂积序列的和
196 0
[递推]双幂序列、多幂序列、双幂积序列的和
|
机器学习/深度学习 存储 算法
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
求出任意非负整数区间中1出现的次数
求出任意非负整数区间中1出现的次数
108 0
给你一组数,求出其中两两最大公约数中最大的值
给你一组数,求出其中两两最大公约数中最大的值
62 0
|
算法 Java 编译器
【算法】最后一个单词的长度,颠倒二进制位,排列序列等三道算法题目
最后一个单词的长度,颠倒二进制位,排列序列等三道算法题目
60 0