leetCode-7: 整数反转

题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

示例1:

输入:x = 123
输出:321

示例2:

输入:x = -123
输出:-321

 示例3:

输入:x = 120
输出:21

解题思路1:使用 Java 提供的 String 和 Integer 的一些方法,通过转换成字符串之后再处理,代码如下:

String s = String.valueOf(x);
// 判断是否为负数
boolean isNegative = false;
if (s.charAt(0) == '-') {
    isNegative = true;
    s = s.substring(1);
}
// 数字反转
s = new StringBuilder(s).reverse().toString();
s = isNegative ? "-" + s : s;
try {
    // 数字转换
    return Integer.parseInt(s);
} catch (Exception e) {
    return 0;
}

首先将待反转的 int 类型的数值 x 转换为 String 类型的字符串 s,然后去判断 s 是否带 “-” 号,如果带,则认为待反转数值 x 为负数,此时需要将 s 的 “-” 号去掉进行 reverse() 反转操作,反转之后将负数的 “-” 再重新加上,然后进行 String 转 Integer 的操作,如果转换过程中超出 Integer 所表示的数值范围(x > 2147483647 || x < -2147483648)了,则直接 catch 异常之后 return 0 即可。

解题思路二:使用 Long 类型的中间值来存储反转后的值,之后再强转回 int 返回。

long result = 0;
while (x != 0) {
    result = result * 10 + x % 10;
    x = x / 10;
}
if (result > 2147483647 || result < -2147483648) {
    return 0;
} else {
    return (int)result; 
}

这种 x = x / 10 的反转数字的方式很常见,望牢记!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值