LeetCode——7.整数反转

通过万岁!!!

  • 题目:给你一个整数,例如123,然后输出321。就是将这个数进行了反转。但是给定的数是[-2^31, 2^31-1],而且我们不能使用64位的整数。
  • 思路:
    • 错误思路:首先说一个简单的思路,就是将int转成String,得到长度len,然后从len-1开始遍历,每次都乘10的i次方,然后累加。但是这样会出现问题,例如1534236469,反转以后int存不下。因此这种思路不行。
    • 还有一种方式,就是我们每次都将计算结果*10,然后加上本次遍历的结果。换句话说,本次遍历的放在了个位上。然后这个数需要每次进行计算之前,都看一下有没有超过int的max就可以了。
  • 技巧:
    • 这里我们不进行字符串的转换,而是使用取余即可。
    • 并且,如果我们发现是负数,可以将x*-1后调用这个函数,并将返回结果*-1后再返回。

伪代码

定义变量ans,也就是我们转换后的变量。
while循环x不等于0
        判断ans是不是大于最大值/10或者小于最大值/10,这时候再*10以后,一定是越界了,所以直接返回0就可以了。
        判断如果等于最大值的时候,x如果是大于7,也是不能表示的,因为最大值的个位数是7,当前判断的情况是2147483647到147483649的时候
    判断如果等于最小值的时候,x如果是小于-8,也是不能表示的,因为最小值的各位是8,当前判断的情况是-2147483648到-2147483649的时候
    然后就是正常情况了,然后加上当前的个位数。
    x还需要除10
return ans;

java代码

class Solution {
    public int reverse(int x) {
        int ans = 0;
        while (x != 0) {
            if (ans > Integer.MAX_VALUE / 10 || ans < Integer.MIN_VALUE / 10) return 0;// 这时候还是能比较,但是下面要对ans在乘10了
            // 但是需要注意最大值为2147483647,最小值为-2147483648,再加下面两句会更加好,当让不加也能通过
            if (ans == Integer.MAX_VALUE / 10 && x > 7) return 0;
            if (ans == Integer.MIN_VALUE / 10 && x < -8) return 0;
            ans = ans * 10 + x % 10;
            x /= 10;
        }
        return ans;
    }
}
  • 总结:这个题的主要难点在于边界情况。其余的用什么方法其实都无所谓。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值