python3 坑爹的int

把字符串转换成整数

http://www.nowcoder.com/questionTerminal/1277c681251b4372bdef344468e4f26e

这道题一开始的实例通过只有85%,基本上市每个pyer都会忽略的问题。

熟悉python的人都知道,python中不像java有长整型、短整型之分。python中的int是动态长度且整型(参考:https://blog.csdn.net/qq_41386300/article/details/90552723)

所以,按理来说,用python处理这道题不用考虑数值溢出的问题

思路:
①:建立 数字0-9 和字符'0'-'9'映射的字典(0-9对应的ascii码为48-57,chr(x)返回ascii码对应的字符,为str类型)
②:去除首位符号
③:遍历s,算出无符号结果值
④:分别判断当符号为+-的时候是否会出现整型溢出的异常,有则返回0,无则返回 有符号整型

# -*- coding:utf-8 -*-
class Solution:
    def StrToInt(self, s):
        # write code here
        if not s:
            return 0
        # 保存符号值,用于后边输出判断用
        ss = s[0]
        # 建立映射
        num_dict = dict(zip([chr(i) for i in range(48,58)],[i for i in range(10)]))
        s =s.lstrip('-').lstrip('+')
        count = 0
        length = len(s)
        for i in range(0,length):
            if ord(s[i])>57:
                return 0
            count += num_dict[s[i]] * 10**(length-i-1)
        if ss == '-':
            if -count <-0x80000000:
                return 0
            return -count
        if count >0x7FFFFFFF:
            return 0
        return count
全部评论
严格的来说,ord()已经算是内置字符串转整数的函数了。
点赞 回复 分享
发布于 2020-02-16 17:40
第15行为什么只用加ord(s[i])>57这一个条件,ord(s[i])<48不是也不满足吗?
点赞 回复 分享
发布于 2020-09-12 13:56

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务