美文网首页leetcode刷题
LeetCode 6. 整数反转

LeetCode 6. 整数反转

作者: 笙绳省盛 | 来源:发表于2019-01-23 13:47 被阅读0次

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

    示例 1:
    输入: 123
    输出: 321

    示例 2:
    输入: -123
    输出: -321

    示例 3:
    输入: 120
    输出: 21
    注意:

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

    我的解法:将整形转换成字符串,判断首位是否是“-”,再将字符串反转,注意判断是否在在整形范围以内。
            let str = "\(x)"
            let array = Array(str)
            let firstStr = array[0]
            if firstStr == "-"{
                let intStr = str[str.index(str.startIndex, offsetBy: 1)...]
                if -Int(String(intStr.reversed()))! < Int32.min{
                    return 0
                }else{
                    return -Int(String(intStr.reversed()))!
                }
            }else{
                if Int(String(str.reversed()))! > Int32.max{
                    return 0
                }else{
                    return Int(String(str.reversed()))!
                }
            }
    
    查看他人的解法:初始化一个result为0,将原来的值%10之后算出每一位值,加上result * 10就可以实现反转。
        func reverse(_ x: Int) -> Int {
            guard x >= Int32.min && x <= Int32.max else {
                return 0
            }
            var target = x
            let negative = target < 0
            if negative{
                target *= -1
            }
            var result = 0
            while target > 0{
                result = result &* 10 &+ target % 10 //值溢出运算符是为了防止32位环境下溢出
                target /= 10
            }
            guard result > 0 else{
                return 0
            }
            if negative{
                result *= -1
            }
            return result >= Int32.min && result <= Int32.max ? result : 0
        }
    
    学到的知识:溢出运算符可以防止溢出
    • &+ 溢出加法
    • &- 溢出减法
    • &* 溢出乘法
    • &/ 溢出除法
    • &% 溢出求余

    相关文章

      网友评论

        本文标题:LeetCode 6. 整数反转

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