给定数字的最小值

时间:2019-04-07 12:11:35

标签: java java-8 logic

我最近进行了一次Codility测试。有一个我无法解决的问题。现在,我正在家里尝试,我想获得帮助。我不记得完整的问题语言,但是我确实记得输出的结果,程序将如何响应。我们走了。

“编写一个给定数字N的Java程序,需要找到给定数字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());
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您的解决方案似乎工作正常。唯一没有考虑的是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;
}

答案 1 :(得分:0)

使用数学库应该可以使用约16位数字。

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

在<1中未定义计算;我们返回0。对于in = 1,我们将为每个原始代码返回0,尽管返回1肯定会更一致:2,3,... 9返回1,那么为什么1不返回1?

答案 2 :(得分:0)

Thank You! Guys. All the suggestions were helpful. Infact, every suggestion has a learning. Here is the updated code. Please accept if you think its good enough.

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());
        }
    }