猿问

如何有效地返回具有给定位数的最大可能整数

例如,999如果给定一个n等于 3,那么最有效的方式是什么。


这就是我现在所拥有的,但我想知道是否有更优雅的方式。


public static int largestPossibleNumber(int numDigits) {

  return Integer.parseInt(new String(new char[numDigits]).replace("\0", "9"));

}

示例用法:


for (int i = 1; i <= 5; i++) {

  System.out.println(largestPossibleNumber(i));

}

输出:


9

99

999

9999

99999


幕布斯7119047
浏览 201回答 3
3回答

婷婷同学_

您只有8 个有效答案,因此您可以对它们进行硬编码:&nbsp; private static int[] s_Numbers = {&nbsp; &nbsp; 0, 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999};&nbsp; private static int largestPossibleNumber(int n) {&nbsp; &nbsp; return s_Numbers[n];&nbsp; }

一只名叫tom的猫

您正在寻求最有效的方法。很难证明某种方法是最有效的——它至少需要实现和基准测试多种方法。但是这里有一个非常快的方法来做到这一点——只需创建一个Map,或者使用一个switch,见下文。这是有效的,因为 an 的大小int是固定的。但是请注意,此方法不会扩展到例如BigIntegers。public static int largestPossibleNumber(final int numDigits) {&nbsp; &nbsp; switch (numDigits) {&nbsp; &nbsp; &nbsp; &nbsp; case 1: return 9;&nbsp; &nbsp; &nbsp; &nbsp; case 2: return 99;&nbsp; &nbsp; &nbsp; &nbsp; case 3: return 999;&nbsp; &nbsp; &nbsp; &nbsp; case 4: return 9999;&nbsp; &nbsp; &nbsp; &nbsp; case 5: return 99999;&nbsp; &nbsp; &nbsp; &nbsp; case 6: return 999999;&nbsp; &nbsp; &nbsp; &nbsp; case 7: return 9999999;&nbsp; &nbsp; &nbsp; &nbsp; case 8: return 99999999;&nbsp; &nbsp; &nbsp; &nbsp; case 9: return 999999999;&nbsp; &nbsp; &nbsp; &nbsp; case 10: return Integer.MAX_VALUE;&nbsp; &nbsp; &nbsp; &nbsp; default: throw new IllegalArgumentException();&nbsp; &nbsp; }}

蝴蝶不菲

public static int largestPossibleNumber(int n) {&nbsp; &nbsp; return (int) (Math.pow(10.0, n)) -1;}
随时随地看视频慕课网APP

相关分类

Java
我要回答