我最近进行了一次Codility测试。有一个我无法解决的问题。现在,我正在家里尝试,我想获得帮助。我不记得完整的问题语言,但是我确实记得输出的结果,程序将如何响应。我们走了。
“编写一个给定数字N的Java程序,需要找到给定数字N的最低数字。N可能也是十亿个数字。” {这可能不是确切的,抱歉!}
例如:
N = 1则o / p为0。
N = 123则o / p为100
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());
}
}
}
答案 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());
}
}