本着为后面研究生铺路,必须把算法整明白,于是乎入了leetcode 算法第四版也在看,不过觉得不配合视频真的对推理证明不那么容易接受,后面的题答案后续也会贴上来。今天主要是为了分析一下刷题的第七题下面上题
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
题目大概意思就是输入一个integer(注意是整形,不是整数)然后把它翻转,边界条件是不能越integer的界
我一开始用java写想用字符串直接指针就好代码如下
public static int test(int x) {
if (x > 0) {
String str =x + "";
char[] a = str.toCharArray();
int j = a.length - 1;
for (inti = 0; i < a.length / 2; i++) {
char temp = a[i];
a[i] =a[j];
a[j--] =temp;
}
str = String.valueOf(a);
x = Integer.parseInt(str);
returnx;
} else if (x < 0) {
x = x * -1;
String str =x + "";
char[] a = str.toCharArray();
int j = a.length - 1;
for (inti = 0; i < a.length / 2; i++) {
char temp = a[i];
a[i] =a[j];
a[j--] =temp;
}
str = String.valueOf(a);
return Integer.parseInt(str) * -1;
}
return 0;
}
但是一直给我报Runtime Error Message:Line 14: java.lang.NumberFormatException: For input string: "9646324351"
Last executed input:1534236469
大概意思就是他输一个越界的string类型本来该返回0的但是我还是返回了一个倒叙的数,没办法只能用数学方法取模了,这里参考了一个大神的做法来检测边界条件
public int reverse(int x) {
int ans=0;
while(x!=0){
int temp=ans*10+x%10;
if(temp/10!=ans){//如果此时temp和ans不相等那么说明temp越界了,这个设计省去了很多麻烦
return 0;
}
ans=temp;
x/=10;
}
return ans;
}
就酱,明天继续刷