美文网首页LeetCode题库-Swift解题
7.整数翻转(Swift版)

7.整数翻转(Swift版)

作者: Mage | 来源:发表于2018-12-11 15:45 被阅读5次

    一、题目

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

    输入: 123
    输出: 321
    

    示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

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

    二、解题

    使用推出数字和溢出前进行检查的方法。
    推出数字pop = num % 10; num /= 10
    累加总数rev = rev * 10 + pop
    为了防止溢出,累加前进行溢出检查。
    时间复杂度:O(n),空间复杂度:O(1)

    三、代码实现

        class Solution {
            func reverse(_ x: Int) -> Int {
                var num = x
                
                var rev = 0;
                while num != 0 {
                    // 弹出最后一个数
                    let pop = num % 10
                    num /= 10
                    // 正数溢出检查
                    if rev > 214748364 || (rev == 214748364 && pop > 7) {
                        return 0
                    }
                    // 负数溢出检查
                    if rev < -214748364 || (rev == -214748364 && pop < -8) {
                        return 0
                    }
                    // 累加
                    rev = rev * 10 + pop
                }
                return rev
            }
        }
    

    Demo地址:github

    相关文章

      网友评论

        本文标题:7.整数翻转(Swift版)

        本文链接:https://www.haomeiwen.com/subject/rbndqqtx.html