leetCode–整数反转
题目描述:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
题目分析
-
看到反转我们应该想到可以将数字转换为字符串进行解题,不过要分情况讨论
-
题目中说:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^{31}−231, 2^{31} − 1231−1] 可以理解为:
①不能够使用长整形long;
②可以使用长整形long,需要解释什么情况下返回值为0;
- 综合上面的分析,给出以下三种解法。
一.字符反转法
思路分析
- 输入为0的时候,直接返回输入值;
- 不为0的时候,先将输入的数字用StringBuilder转化为字符串后进行反转。
- 从反转后的字符串中返回“-”的索引,
- 如果索引不为-1,则说明反转后的数字是有符号的
- 如果有符号,则将末尾符号删去,添加到前面
- 无符号或者删去符号后的字符串转化为长整型会自动消去前面的0
- 然后判断是否越界
- 最后强转为int类型返回
解题代码
class Solution {
public int reverse(int x) {
if(x != 0){
long fNum = 0;
StringBuilder builder = new StringBuilder();
builder.append(x).reverse();
int i = builder.indexOf("-");
if(i != -1){
builder.deleteCharAt(<