LeetCode力扣Swift整数反转平民和上帝两种解法

给定题目


image

这个题目需要注意两点,一个是负数,另一个是32位数值的极限溢出。好了,开干!
平民解法和上帝解法其实思路是一样的,第一步先将有符号整数转成字符串,第二步将字符串反转,第三步反转后的字符串转成整数,第四步判断是否溢出。

平民解法:

直接贴代码吧~~~


func reverse( _x: Int) -> Int {

            // 计算32位最大值和最小值 2的n次方为 1<

            // 注意:有符号整数

            let max = 1<<31-1

            let min = -1<<31

            // x 取绝对值并转成字符串

            let y = abs(x)

            let a ="\(y)"

            var lArr = [Character]()

            // 遍历字符串生成反转后的字符数组

            for I in a.characters{

                // 注意:反转过程中前面如果遇到0不添加到数组里

                if i !="0" ||  lArr.count != 0{

                    lArr.insert( i,  at: 0)

                }

            }

            var b = ""

            // 遍历字符数组组合为字符串

            for I in lArr  { 

                b.append(i)

            }

            var c =0

            if x == 0 { 

                // x为0直接返回0

                return 0

            }else if x  > 0 {

                // 字符串转为有符号整数

                // 注意:此处使用longLongValue或者integerValue 因为intValue会返回32位的值,c的值可能会超出32位的范围

                // 这里也可以用  Int(b)!  但是不知道为什么LeetCode编译会出错

                c = Int(NSString(string: b).longLongValue)

            }else {

                c = Int(-NSString(string: b).longLongValue)

            }

            // 判断并返回

            if c < min || c > max  {

                return 0

            }else{

                return c

            }

        }

还击败了不少道友,哈哈


image

上帝解法:

直接代码~~


func reverses(  _x: Int) -> Int { 

            var string: String

            var result: Int

            if x >= 0 {

                // 看了上面再看这里是不是,哇!swift有直接倒序字符串的方法啊

                string = String("\(x)".reversed())

                result = Int(string)!

            }else{

                string = String("\(-x)".reversed())

                result = 0 - Int(string)!

            }

            // 反转后整数溢出那么就返回 0

            if result  > INT32_MAX - 1 ||  result  <  -INT32_MAX-1 {

                return 0

            }else {

                return result

            }

        }

image

好了,本次分享就到这里,有什么问题和错误欢迎留言。

你可能感兴趣的:(LeetCode力扣Swift整数反转平民和上帝两种解法)