题目地址(7. 整数反转)
https://leetcode-cn.com/problems/reverse-integer/
题目描述
1 | 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 |
前置知识
公司
- 字节跳动、百度
思路
题目解答主要有两种思路,一种是使用字符串的翻转,但是这样不符合题目原意;另一种则是进行数学计算,同时要注意的是,在进行数学计算的时候,由于题目要求不使用64位进行存储,所以使用long数据类型也是不合题意的,这里就要涉及到关于int类型边界的判断了。判断时需要注意的点有以下几点:
- 判断时不能等全部都翻转完毕后再判断,因为在这过程中如果发生了溢出,程序是不会通过的,因此判断的位置要在取出下一位但还没有将取出的这一位添加到已有的数字上时进行判断,判断再加入此位(下一个数字)是否会发生溢出,如果溢出则直接返回0,否则继续添加(正负判断一致)。
- 溢出条件有两个,一个是大于整数最大值
MAX_VALUE
,另一个是小于整数最小值MIN_VALUE
,设当前计算结果为ans,下一位为pop。 - 从
ans * 10 + pop > MAX_VALUE
这个溢出条件来看
当出现ans > MAX_VALUE / 10
且 还有pop
需要添加 时,则一定溢出
当出现ans == MAX_VALUE / 10
且pop > 7
时,则一定溢出,7是2^31 - 1的个位数 - 从
ans * 10 + pop < MIN_VALUE
这个溢出条件来看
当出现ans < MIN_VALUE / 10
且 还有pop
需要添加 时,则一定溢出
当出现ans == MIN_VALUE / 10
且pop < -8
时,则一定溢出,8是-2^31的个位数
关键点
- 边界值的判断
代码
- 语言支持:Java
Java Code:
1 |
|