难度:
简单
描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例
1:
输入: 123
输出: 321
2:
输入: -123
输出: -321
3:
输入: 120
输出: 21
注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^(31 − 1)]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
语言:
swift
解析:
这题还是比较简单的。如何取整数的各位呢?对10求余数,再除以10,就可以得到。然后如何将数字反转呢,当然也是每位乘10,再相加。
需要注意的是要判断是否溢出。题目注明为32位有符号整数,则应该用Int32.max = 2147483647和Int32.min = -2147483647。我们在循环中,是需要累加的,需要判断Int32.max和Int32.min除以十的结果是否满足条件,同时还要留意在resultNumber == Int32.max 或 resultNumber == Int32.min的时候,由于得出的结果还要乘10,得出的结果为绝对值|2147483640|,所以endNumber的绝对值不能大于7。完毕。
代码如下:
class Solution {
func reverse(_ x: Int) -> Int {
var originalNumber = x
var resultNumber = 0
while originalNumber != 0 {
let endNumber = originalNumber % 10
originalNumber /= 10
if (resultNumber > Int32.max / 10) || (resultNumber == Int32.max / 10 && endNumber > 7) {
return 0
}
if (resultNumber < Int32.min / 10) || (resultNumber == Int32.min / 10 && endNumber < -8) {
return 0
}
resultNumber = resultNumber * 10 + endNumber
}
return resultNumber
}
}
总结
很基础的一道题,注意边界条件,还要注意不同的类型长度是不同的。