zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    数据库设计 概念结构设计(以权限系统为例)
    sp_addlinkedserver使用方法
    动态页面静态化技术(很不错的教程摘录)
    C#获取硬件序列号
    [转]消息队列关于MSMQ的基础知识
    通过Image对象获取对象的格式
    历史项目的回忆 2008.04.27
    解决Access to Message Queuing system is denied.权限问题
    windows 输入法生成器 导出输入法的mb文件到txt
    [转载]C#版可调节的文字阴影特效
  • 原文地址:https://www.cnblogs.com/zmbreathing/p/datawhale_leetcode_task2.html
Copyright © 2011-2022 走看看