swift算法:整数反转

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

例1:输入:123       输出:321

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

例3:输入:120       输出:21

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

解法一

思路:将整数去掉符号,转换为字符串,通过遍历字符串进行反转,需要判断反转后的字符串整数是否溢出,最后在加上符号,

时间复杂度:O(n)

具体实现:

var a = x
         if a == 0 {
            return 0
        }
        
        //定义一个bool表示正负数
        var bool : Bool = true
        
        if x < 0 {
            bool = true
        }else{
            bool = false
        }
        //将字符串中的-移除
        var c = String(x)
        if c.contains("-") {
            c.removeFirst()
        }
        var result : String! = ""
        //遍历字符串,将当前的字符拼接在后面
        for i in c {
            result = String(i)+result
        }
        //如果字符串的第一个字符为0,则需要移除
        if result.first == "0" {
            result.removeFirst()
        }
        //判断反转后的字符串整数是否溢出
        if NSString.init(string: result).integerValue > 2147483647 {
            return 0
        }
        //如果传入的是负数,则需要加上-标识
        if bool {
            result = "-"+result
        }

        return NSString.init(string: result).integerValue

解法二

思路:使用数学方法,在没有数组的情况下,对数字进行 弹出 和 推入操作,最后判断下反转的数字是否溢出

pop:弹出操作

       pop = x%10

       x /= 10

push:推入操作

      temp = rev * 10 + pop

      rev = temp      

时间复杂度:O(log(x))

具体实现:

func reverseInt(x : Int)->Int{
    var a = x

    var rev = 0
        while a != 0 {
            let pop = a%10
            a /= 10
            if (rev > Int.max/10)||(rev == Int.max/10  && pop > 7){
                return 0
            }
            if (rev < Int.min/10)||(rev == Int.min/10  && pop < -8){
                return 0
            }
            rev = rev*10+pop
        }
        return rev
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值