题目很简单,却写了一小时
class Solution:
def reverse(self, x: int) -> int:
tmp = 0
sign = 1 if x >= 0 else -1
x = abs(x)
while (x != 0):
tmp = x % 10 + 10 * tmp
x = x // 10
result = tmp * sign
if (result > 2**31 - 1 or result < -2**31): # 出错半天不知道,调试半天原来符号用错了,2^32使用**符号
result = 0
return result
1.python中的幂函数是**要记牢,调试的时候觉得不可能的问题,往往是某个小细节,迅速定位到问题所在的区域是一种能力
2.python中这里取巧了,其和长整型在于整数有一定的位数限制:在32位机器上,整数的位数为32位,在64位系统上,整数的位数为64位,一旦超过位数,则会自动转换为长整型(python2.2以后的版本)。在题目里要求的32位溢出,其实针对的是java和c++这类语言。
对于c++比较麻烦,溢出是无法赋值,可以catch 异常。
对于java ,可以计算溢出的数字再逆推回去是否还等于原来的数进行判断。
3.简单题的考虑,Corner case,一是针对负数,而是针对溢出的情况如何想办法进行处理。
溢出前进行判断?溢出后进行判断?
4.对语言特性的不同通过这题进行了深入理解,对于基本的数据结构有不同。各个环境下%运算符的含义不同,比如c/c++,Java 为取余,而python则为取模。
step1.求整数商: c = a/b;
step2.计算模或者余数: r = a - c*b.
取余运算在取c的值时,向0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。