数据结构之整数反转

题目信息

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
      输入: 123
      输出: 321
示例2:
      输入: -123
      输出: -321
示例 3:
      输入: 120
      输出: 21
注意:
    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 
    [−2^31,  2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解题思路

从题目信息可以看出来,这道题简单来说就是数字反转,只是在要反转的数字
为负数和末尾部分为0时要做处理,而且从注意来看一个数字反转过来时候可
能越界。我的思路就是为负数时,记录一下,再将其转换成正数去处理。对于
末尾你为0的,将数字对10进行取余直至余数不为0时为止。处理过程中判断一
下是否越界

代码

func reverse(_ x: Int) -> Int {
    // 如果为0时直接返回
    if x == 0 {
        return 0;
    }
    var flag: Int = 0;
    var temp = x;
    // 如果为负数,用flag记录,并将其转为正数
    if x < 0 {
        flag = 1;
        temp = -temp;
    }
    
    // 对该正数进行对10取余,直至不为0是为止
    while temp % 10 == 0 {
        temp = temp / 10;
    }
    
    let numberString: String = String(temp)
    let reverseString = String(numberString.reversed())
    
    temp = Int(reverseString) ?? 0
    if flag > 0 {
        temp = -temp;
    }
    // 因为是字符串保存,判断是否越界
    if temp > 2147483647 || temp < -2147483648 {
        return 0;
    }
    return temp;
}

题目链接

原文地址:https://www.cnblogs.com/muzichenyu/p/12777605.html