题目信息
给出一个 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;
}