LeetCode腾讯精选50题--整数反转
题目:
分析:
题目很简单明了,无非就是把数字倒叙输出,这里用到栈的思想 即从栈尾弹出 压入另一个栈
但题目增加了限制条件,当得到的数不在【-2^31,2^31-1】范围内时,直接返回0,这就需要在编写的时候增加判断条件
我们用数学的思维来思考这个限制
即 -2^31 <= rev * 10 + digit <= 2^31 - 1 知INT_MAX = 2^31 - 1
对INT_MAX进行变化
把其代入上式,加上判断分析
又因为由题意,给出的x可以和INT_MAX位数相等且INT_MAX 的最高位为2 即digit<=2
代码:
class Solution { public int reverse(int x) { int rev = 0; while(x != 0){ if(rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10){ //超出数据范围,直接返回0 return 0; } int digit = x % 10; //求余 注意 负数求余 -18 % 10 = -8; x = x / 10; rev = rev * 10 + digit; } return rev; } }