给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
摘一个示例做个说明.
示例 1:
输入:x = 123
输出:321
条件分析:
- 有符号数 -> 存在正负
- 32位 -> 数据长度有限,超出后返回0
解决思路1:
- 根据分析2,考虑输入和输出是否数据超限
- 通过递归不断求每一位上的数据和余数,通过商判断是否跳出循环,通过余数进行计算返回值
解决办法
代码实现-Swift版本:
思路1代码:
func reverse(_ x: Int) -> Int {
// 先判断输入内容是否超限
if x < Int(powl(-2, 31)) || x > Int(powl(2, 31)) - 1 {
return 0
}
var num = x
var result: Int = 0
// 递归
while num != 0 {
// 求余
let mod = num % 10
// 返回数据 = 上一步的返回数据 乘以 10 加上这次循环余数
result = result * 10 + mod
// 不断减小num,跳出循环
num = num / 10
}
// 判断结果内容是否超限
if result < Int(powl(-2, 31)) || result > Int(powl(2, 31)) - 1 {
return 0
}
return result
}
测试用例:
let num = 1534236469
考察要点:
- 数学
网友评论