Datawhale编程实践(LeetCode 腾讯精选练习50)Task2

1.整数反转

这题让我学到了整数溢出的知识,查阅了资料https://blog.csdn.net/weixin_45722061/article/details/102579358,其中提到

 1 Python 3 中整数的上限是多少?Python 2 呢?
 2 Numpy 中整数的上限是多少?出现整数溢出该怎么办?
 3 关于第一个问题,先看看 Python 2,它有两种整数:
 4 
 5 一种是短整数,也即常说的整数,用 int 表示,有个内置函数 int()。其大小有限,可通过sys.maxint() 查看(取决于平台是 32 位还是 64 位)
 6 一种是长整数,即大小无限的整数,用 long 表示,有个内置函数 long()。写法上是在数字后面加大写字母 L 或小写的 l,如 1000L
 7 当一个整数超出短整数范围时,它会自动采用长整数表示。举例,打印 2**100 ,结果会在末尾加字母 L 表示它是长整数。
 8 
 9 但是到了 Python 3,情况就不同了:它仅有一种内置的整数,表示为 int,形式上是 Python 2 的短整数,但实际上它能表示的范围无限,行为上更像是长整数。无论多大的数,结尾都不需要字母 L 来作区分。
10 
11 也就是说,Python 3 整合了两种整数表示法,用户不再需要自行区分,全交给底层按需处理。
12 
13 理论上,Python 3 中的整数没有上限(只要不超出内存空间)。这就解释了前文中直接打印两数相乘,为什么结果会正确了。
14 
15 回到前面的第二个话题:Numpy 中整数的上限是多少?
16 
17 由于它是 C 语言实现,在整数表示上,用的是 C 语言的规则,也就是会区分整数和长整数。
18 
19 也就是说它默认的整数 int 是 32 位,表示范围在 -2147483648 ~ 214748364720 
21 对照前文的截图,里面只有两组数字相乘时没有溢出:100007*4549、100012*13264,其它数据组都溢出了,所以出现奇怪的负数结果。

综上所述,python中没有整数溢出问题,发现了python的一处强大之处

不过题目假设我们的环境只能存储得下 32 位的有符号整数,所以还是要对其进行判断的

在leetcode上看到了好多种解法和思路,感觉对自己的帮助很大,目前自己对算法题感觉还停留在暴力解/效率很低的解法层面,感觉得多看看leetcode高质量的代码及解法

又学到了python的三元表达式

variable = a if exper else b

还学到了python中 -123 // 10 答案是13,-123 % 10 答案是7

http://blog.sina.com.cn/s/blog_6a6c136d0101iukq.html中提到

python是向下取整而不是C/C++,Java的向零取整

可以看到python的除法和取模操作和其他语言都不一样

 1 class Solution(object):
 2     def reverse(self, x):
 3         """
 4         :type x: int
 5         :rtype: int
 6         """
 7         INT_MAX = 2**31 -1
 8         INT_MIN = -(2**31)
 9         res = 0
10         while x != 0:
11             pop = x % 10 if x > 0 else (x % 10 - 10 if x % 10 != 0 else x % 10)      # (x > 0)?(x % 10):(10 - x%10)
12             x = x // 10 if x > 0 else (x // 10 + 1 if x % 10 != 0 else x // 10)
13             if res > INT_MAX // 10 or (res == INT_MAX // 10 and pop > 7):
14                 return 0
15             if res < INT_MIN // 10 + 1 or (res == INT_MIN // 10 + 1 and pop < -8):
16                 return 0
17             res = res * 10 + pop
18         return res

2.

原文地址:https://www.cnblogs.com/zmbreathing/p/datawhale_leetcode_task2.html