题目
给定一个 32 位有符号整数,将整数中的数字进行反转。注意:假设我们的环境只能存储32位有符号整数,其数值范围是[-231,231-1]。根据这个假设,如果反转后的整数溢出,则返回0。
解决方案
1.我的方法
首先想法很简单,分为负数和非负数。把数字每次取出个位数拼成新的数字就可以。但要注意范围,防止溢出。
运行时间:28ms
2.弹出和推入数字
可以将负数和非负数整合在一起。添加两个if条件语句就好。
负数整除(/),取余(%)后还是负数
运行时间:41ms
3.溢出前进行检查
我们假设res是正数。有三种情况:
- 如果res=res*10+tmp导致溢出,那么一定有res>=max_value/10
- 如果res>max_value/10,那么res=res*10+pop一定会溢出
- 如果res=max_value/10,那么只要tmp>7,res=res*10+tmp就会溢出
运行时间:29ms
复杂度分析
时间复杂度:O(log(x)),x中大约有log10(x)位数字
空间复杂度:O(1)