LeetCode——整数反转

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

如果反转后整数超过32位的有符号整数的范围[−2^31,  2^31 − 1],就返回0。

示例1:

输入:x=345
输出:543

示例2:

输入:x=-456
输出:-654

示例3:

输入:x=150
输出:15

我给出的答案是:

class Solution {
    public int reverse(int x) {
        StringBuilder result = new StringBuilder();
        String s = String.valueOf(x);
        String replace = null;
        if (s.contains("-")){
            replace= s.replace("-", "");
            for (int i=replace.length()-1;i>=0;i--){
                char c = replace.charAt(i);
                String s1 = String.valueOf(c);
                result.append(s1);
            }
        }else {
            for (int i=s.length()-1;i>=0;i--){
                char c = s.charAt(i);
                String s1 = String.valueOf(c);
                result.append(s1);
            }
        }

        String i = result.toString();
        if (s.contains("-")){
            return -Integer.parseInt(i);
        }
        return Integer.parseInt(i);
    }
}

当输入的整数比较小时,结果是正确的。

 但是当输入的整数比较大时,代码就会报错。而且自己这个问题很大

 所以看官方思路:

假设 rev是反转后的数据,那么我们可以重复弹出 x的末尾数字。推入rev的末尾。直至x为0。

#弹出x的末尾的数字 digit
digit = x % 10
x/=10

//将弹出的数字digit推入rev的末尾
rev = rev * 10 + digit
private int reverse(int x) {
       int rev = 0;
       while (x!=0){
           if (rev < Integer.MIN_VALUE/10 || rev > Integer.MAX_VALUE/10){
               return 0;
           }
           //获取余数
           int digit = x % 10;
           x /=10;
           rev = rev*10 +digit;
       }
       return rev;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值