LeetCode笔记汇总
题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
思路
首先定义一个boolean类型的flag用来存储变量的正负符号,这样在之后的操作中就可以忽略符号
将整数变为字符串,然后按倒序每次从中取一个,通过StringBuilder类拼接成倒序。
再将拼接字符串转回int类型,判断符号并输出。
本题需要考虑的特殊情况是:如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
在java中可以直接利用异常类,如果在转成int型时,超过范围系统会抛出NumberFormatException,此时我们只需将其捕获,在异常处理代码中直接return 0。这也是java的一个小技巧,很多边界情况都可以通过异常类来直接处理。
代码
class Solution {
public int reverse(int x) {
boolean flag = x > 0 ? true : false;
int ans;
x = Math.abs(x);
String str = String.valueOf(x);
int l = str.length();
StringBuilder sb = new StringBuilder();
for(int i=0;i<l;i++){
sb.append(str.charAt(l-i-1));
}
try{
ans = Integer.valueOf(sb.toString());
}catch(NumberFormatException e){
return 0;
}
if(flag) return ans;
else return -ans;
}
}