【问题标题】:lowest value for given number给定数字的最小值
【发布时间】:2019-04-07 12:11:34
【问题描述】:

我最近做了一个代码测试。有一个我无法解决的问题。现在我正在家里尝试,我想寻求帮助。我不记得完整的问题语言,但我记得程序将如何响应的输出。我们开始吧。

“编写一个java程序,对于给定的数字N,需要找到给定N的最小数字。N也可能是十亿个数字。” {这可能不是准确的,抱歉}

例如:

  1. N=1 则 o/p 为 0。

  2. N=123 则 o/p 为 100

  3. N=1234 则 o/p 为 1000,依此类推。

我的解决方案:--只是一种解决方法,这不是实际逻辑。

class Solution {
    public int solution(int N) {
        int pointer=0;
        if (N == 1) {
            return 0;
        } else {
            String digitsCount = Integer.toString(N); 
            for(int i = 0; i < digitsCount.length(); i++) {
                pointer++;
            }
            StringBuffer subString = new StringBuffer();
            int count=0;
            while(count < pointer-1) {
                subString.append("0");
                count++;
            }
            subString = subString.insert(0, "1");
            return Integer.parseInt(subString.toString());
        }
    }
}

【问题讨论】:

  • 你能解释一下为什么输出是这样的吗?为什么当 N=1 时它应该输出 0?为什么当 n=123 时它应该输出 100?
  • 好吧,我明白了。所以它是这样的:N=123 => 总位数是 3。可能有 3 位数的最小数字是 100。N=1 => 总位数只有 1。可能有 1 位数的最低数字是0.
  • 我明白了。你能展示你在这个问题上的尝试吗?你可以edit发帖。
  • 我已经尝试过解决方案,但不知何故,我对此感觉不太好。我无法通过 java 找到逻辑,因此我刚刚编写了解决方法代码。但不是那么好。 {我会补充问题}
  • 你的解决方案有什么问题?

标签: java java-8 logic


【解决方案1】:

使用数学库,应该适合大约 16 位数字。

long getLow(long in) {
    if (in <= 1) return 0; // see note below
    return (long)(Math.pow(10, Math.floor(Math.log10(in))));
  }

in

【讨论】:

    【解决方案2】:

    您的解决方案似乎运行良好。它唯一没有考虑到的事实是N 可能是一个非常大的数字。 int的最大值只有20亿左右。

    这是我的解决方案:

    public static long getLowestNumberWithSameNumberOfDigits(long input) {
        if (input < 10) { // special case
            return 0;
        }
    
        long trial = 10;
        while (input / trial >= 10) {
            trial *= 10;
        }
        return trial;
    }
    

    【讨论】:

    • 在什么情况下需要这个trial &lt; Long.MAX_VALUE / 10检查?一个简单的while(input / trial &gt;= 10) trial *= 10; 还不够吗?
    • @Holger long 溢出是我的担忧,但现在我想得更多,你说得对。
    【解决方案3】:

    谢谢!伙计们。所有的建议都很有帮助。事实上,每一个建议都有一个教训。这是更新的代码。如果您认为它足够好,请接受。

    private static long solution(long N) {
            if (N == 1) {
                return 0;
            } else {
                String digitsCount = Long.toString(N); 
                int pointer=digitsCount.length();
                StringBuilder subString = new StringBuilder();
                subString.append("1");
                for(int i=0; i<pointer-1; i++) {
                    subString.append("0");
                }
                return Long.parseLong(subString.toString());
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-28
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      相关资源
      最近更新 更多