2022/2/26 LeetCode刷题
第七题,整数反转
一见到反转就想到了字符串,于是写了如下代码:
class Solution {
public int reverse(int x) {
//一开始写的是 int res = Math.abs(x); String s = res +"";有点冗余,毕竟res就这里用了一下。
String s = Math.abs(x); + "";
StringBuilder sb = new StringBuilder();
for (int i = s.length() - 1; i >=0 ; i --){
sb.append(s.charAt(i));
}
int ans = Integer.parseInt(sb.toString());
if (x < 0){
ans = - ans;
}
return ans;
// return x > 0 ? ans : (-ans);上面又冗余了,写代码的习惯有待提高
}
}
虽然上述代码符合大多数情况,但是会有溢出的情况,毕竟int类型数据长度有限,所以会报错。
此外,java int溢出,结果只会保留低32位,高位会抛弃掉
最后借鉴了一下参考答案:
思路:可以直接存一个临时的翻转结果temp,如果这个翻转结果除以10不等于上一个结果,说明有溢出。
(一般临时用的参数名称设置为temp,临时的英文为: temporary)
class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0) {
int tmp = res * 10 + x % 10;
if (tmp / 10 != res) { // 溢出!!!
return 0;
}
res = tmp;
x /= 10;
}
return res;
}
}