阅读 58

LeetCode 刷题笔记 - 7. 整数反转

难度:

简单

描述:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例

1:
输入: 123
输出: 321
复制代码
2:
输入: -123
输出: -321
复制代码
3:
输入: 120
输出: 21
复制代码

注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^(31 − 1)]。请根据这个假设,如果反转后整数溢出那么就返回 0。

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


语言:

swift

解析:

这题还是比较简单的。如何取整数的各位呢?对10求余数,再除以10,就可以得到。然后如何将数字反转呢,当然也是每位乘10,再相加。
需要注意的是要判断是否溢出。题目注明为32位有符号整数,则应该用Int32.max = 2147483647Int32.min = -2147483647。我们在循环中,是需要累加的,需要判断Int32.maxInt32.min除以十的结果是否满足条件,同时还要留意在resultNumber == Int32.maxresultNumber == Int32.min的时候,由于得出的结果还要乘10,得出的结果为绝对值|2147483640|,所以endNumber的绝对值不能大于7。完毕。

代码如下:

class Solution {
    func reverse(_ x: Int) -> Int {
        var originalNumber = x
        var resultNumber = 0
        while originalNumber != 0 {
            let endNumber = originalNumber % 10
            originalNumber /= 10
            if (resultNumber > Int32.max / 10) || (resultNumber == Int32.max / 10 && endNumber > 7) {
                return 0
            }
            if (resultNumber < Int32.min / 10) || (resultNumber == Int32.min / 10 && endNumber < -8) {
                return 0
            }
            resultNumber = resultNumber * 10 + endNumber
        }
        return resultNumber
    }
}
复制代码

总结

很基础的一道题,注意边界条件,还要注意不同的类型长度是不同的。