1 问题描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:-2^31 <= x <= 2^31 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2 解决方案
解法:将数字x
转化为字符串,倒置后再转化为数字进行返回。
存在的问题:
当x
为 1534236469
时,虽然x < Integer.MAX_VALUE
,但是倒置后的结果却是 rev = 9646324351 > Integer.MAX_VALUE
。字符串无法解析为int类型导致出错,如图所示:
我的解答:
class Solution {
public int reverse(int x) {
StringBuilder str =new StringBuilder(String.valueOf(Math.abs(x)< 0 ? 0 : Math.abs(x)));
str.reverse();
if(x < 0){
str.insert(0, "-");
}
long num = Long.parseLong(str.toString());
return (num > Integer.MAX_VALUE) || (num < Integer.MIN_VALUE)
? 0 : (int)num;
}
}
小注:第一次刷题,算法的时间复杂度尚且不是完美的,以后还需要大量的练习不断地去完善。
参考:https://blog.csdn.net/qq_42386550/article/details/99659017