以下是a problem on LeetCode的快照:
对于这个问题,他们提供了您必须填写的框架代码:
public int reverse(int x) {
}
在测试解决方案时,它似乎提供了不合理的输入,不会让我提交我的解决方案。错误是:
请注意,输入为1534236469
。这适合int
作为输入,但反转版本9646324351
自然不适用,因为Java中int
的最大正值是2147483647
。
这只是LeetCode测试中的错误吗?或者是否有一些我无法想象的技巧让我从9646324351
作为reverse
返回int
,一个明显超出范围的值?
这是我的代码,但代码几乎无关紧要,因为返回类型(int
)由问题修复(所以“整数”它们实际上是int
,而不是{{ 1}}):
long
答案 0 :(得分:1)
您应该使用Long.parseLong()
。整数的数字太大了。整数的最大值是2 ^ 31-1 = 2147483647。
答案 1 :(得分:1)
这是LeetCode测试中的一个错误。根本无法存储他们在int
中要求的返回值,因此无法将其返回根据提供的框架代码从reverse
开始。
也许测试用例是在 int
的整个范围内随机生成的,没有考虑到reverse
可以使int
的值超出范围输入
事实证明,如果反转的数字超出范围,他们希望您返回0
。并不是说他们懒得在问题的任何地方提到它。
答案 2 :(得分:0)
我按照方法完成了
int result=0;
try{
result = Integer.parseInt(stringBuilder.toString());
return result;
}catch(Exception e){
return 0;
}
答案 3 :(得分:0)
我已经成功提交了代码,但我仍然想在运行速度和空间利用率方面进行优化。 能否请您分享您对此的看法。
class Solution {
public int reverse(int x) {
String reverse;
if(x==0 && x > Integer.MAX_VALUE && x < Integer.MIN_VALUE){return 0;}
if(x<0){
x = Math.abs(x);
String temp = String.valueOf(x);
int len = temp.length();
reverse = "-";
for(int i=len-1;i>=0;i--){
reverse = reverse + temp.charAt(i);
}
}else{
String temp = String.valueOf(x);
int len = temp.length();
reverse = "";
for(int i=len-1;i>=0;i--){
reverse = reverse + temp.charAt(i);
}
}
try{
int rev = Integer.parseInt(reverse);
return rev;
}catch(Exception e){return 0;}
}
}
运行时间:10 毫秒,比 Java 在线提交的反向整数快 8.10%。 内存使用:37 MB,不到 Java 在线提交的反向整数的 13.88%。