package com.zjp.start.sort; import java.util.ArrayList; /** * 给定任意一个自然数,获取它重新排列后,下一个比它大的自然数,要求时间复杂度O(n) */ public class NextBigNum { public static void main(String[] args) { int num = 1347654; String nextInt = findNextInt(num); System.out.println(nextInt); } private static String findNextInt(int num) { //将该自然数放入数组 ArrayList<Integer> nums = new ArrayList<Integer>(); while (num % 10 > 0) { nums.add(0, num % 10); num = num / 10; } //为了和原数接近,我们要保持高位不变,低位在最小范围内变换顺序 //从右向左寻找逆序区域的临界值 int cricitalPoint = findCricitalPoint(nums); if (cricitalPoint == -1) { //不存在 return "不存在"; } else { //存在,就把临界值的前一个数和逆序区域中刚刚大于该数的数字交换位置,然后把逆序区域变为顺序 return reorder(nums, cricitalPoint); } } /** * 寻找逆序区域的临界值 * * @param num
java笔试题--给定任意一个自然数,获取它重新排列后,下一个比它大的自然数
最新推荐文章于 2020-07-04 12:26:38 发布