美文网首页
2019-05-14 LeetCode7. 整数反转

2019-05-14 LeetCode7. 整数反转

作者: mztkenan | 来源:发表于2019-05-14 10:42 被阅读0次

    题目很简单,却写了一小时

    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()函数)。

    相关文章

      网友评论

          本文标题:2019-05-14 LeetCode7. 整数反转

          本文链接:https://www.haomeiwen.com/subject/oewjaqtx.html