鱼C论坛

 找回密码
 立即注册
查看: 2321|回复: 16

[技术交流] 2.字符串转换整数 (atoi)

[复制链接]
发表于 2020-2-6 18:40:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 _2_ 于 2020-2-6 19:39 编辑
class Solution:
    def myAtoi(self, str: str) -> int:
        """
        8. 字符串转换整数 (atoi)
        https://leetcode-cn.com/problems/string-to-integer-atoi/
        """
        try:
            a = int(str)
            if a < (INT_MIN := pow(2,-31)):
                return INT_MIN
            elif a > (INT_MAX := pow(2,31) - 1)
                return INT_MAX
            else:
                return a
        except ValueError:
            a = iter(str)
            b = [i for i in a]
            if isinstance(b[0],str):
                return 0
            elif isinstance(b[0],int):
                d = iter(b)
                e = []
                while 1:
                    f = next(d)
                    if type(e) == "<class 'int'>":
                        e.append(f)
                        continue
                    else:
                        break
                        return int("".join(e))

感觉写的有点乱啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-6 18:41:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 18:41:28 | 显示全部楼层
这题我根本没做出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 18:42:39 | 显示全部楼层
zltzlt 发表于 2020-2-6 18:41
这题我根本没做出来

没登录,也不知道对不对,拜托你测试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 18:43:19 | 显示全部楼层
_2_ 发表于 2020-2-6 18:42
没登录,也不知道对不对,拜托你测试一下

Invalid syntax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 18:46:52 | 显示全部楼层
type(b[0]) == "<class 'int'>"

type() 不是字符串
                    else:
                        break
                        return int("".join(e))

你是怎么想的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 19:36:31 | 显示全部楼层
zltzlt 发表于 2020-2-6 18:46
type() 不是字符串

判断类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 19:37:42 | 显示全部楼层
type(b[0]) == int

这样岂不是更好?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 19:37:56 | 显示全部楼层
zltzlt 发表于 2020-2-6 18:46
type() 不是字符串

那我改一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 19:40:02 | 显示全部楼层
zltzlt 发表于 2020-2-6 19:37
这样岂不是更好?

已改,用的 isinstance()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 19:41:33 | 显示全部楼层
zltzlt 发表于 2020-2-6 18:41
这题我根本没做出来

好久没刷题了,找一个简单的练练手感
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 22:54:19 | 显示全部楼层
class Solution:
    def myAtoi(self, str: str) -> int:
        """
        8. 字符串转换整数 (atoi)
        https://leetcode-cn.com/problems/string-to-integer-atoi/
        """
        try:
            a = int(str)
            INT_MIN = pow(-2,31)
            INT_MAX = pow(2,31)-1
            if a < INT_MIN:
                return INT_MIN
            elif a > INT_MAX:
                return INT_MAX
            else:
                return a
        except ValueError:
            a = str.lstrip(" ")
            if a in ['+','-','']: #这些不好处理,笑哭
                return 0
            b = [i for i in a]
            if b[0].isnumeric() or b[0] in ['+','-']:
                c = iter(b)
                e = []
                while 1:
                    f = next(c)
                    if f.isnumeric():  
                    #本质上"1"也是字符串,不能用type或isinstance方法判断
                        e.append(f)
                        continue
                    else:
                        break
                if e[0] == "+":  #正号不好转化,先去
                    del e[0]
                a = int("".join(e))
            else:
                return 0
帮你修改了一下,这个代码还有点问题,我自己已经改好了
执行发生错误案例"+-3"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 23:37:31 | 显示全部楼层
shangjiecat 发表于 2020-2-6 22:54
帮你修改了一下,这个代码还有点问题,我自己已经改好了
执行发生错误案例"+-3"

不止这个问题,你要再思考一下了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-7 15:51:46 | 显示全部楼层
shangjiecat 发表于 2020-2-6 23:37
不止这个问题,你要再思考一下了

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 19:00:55 | 显示全部楼层
A:
from functools import reduce

class Solution:
    def myAtoi(self, str: str) -> int:
        Atoi=False
        List=[]
        sign=True
        
        for i in str:
            if Atoi:
                if i.isdigit():
                    List.append(int(i))
                    
                else:
                    break
                    
            else:
                if i.isdigit():
                    Atoi=True
                    List.append(int(i))
                    
                elif i=='-':
                    sign=False
                    Atoi=True
                    
                elif i=='+':
                    Atoi=True
                    
                elif i==' ':
                    pass
                    
                else:
                    return 0
                
        
        res=reduce(lambda x,y:x*10+y,List,0)
        return min(res,2147483647)if sign else max(-2147483648,-res)
1079 / 1079 个通过测试用例
状态:通过
执行用时:44 ms
内存消耗:13.4 MB
提交时间:0 分钟之前

B:
from re import compile
exp = compile('^\s*[+-]?\d+')

class Solution:
    def myAtoi(self, str: str) -> int:
        if(res := exp.search(str)):            
            if (res := int(res.group())) < 0:
                return max(-2147483648, res)
            
            else:
                return min(2147483647, res)
        else:
            return 0
执行结果:
通过
显示详情
执行用时 :
36 ms
, 在所有 Python3 提交中击败了
78.97%
的用户
内存消耗 :
13.4 MB
, 在所有 Python3 提交中击败了
5.78%
的用户

PS:大小限制真的蛋疼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 12:44:17 From FishC Mobile | 显示全部楼层
永恒的蓝色梦想 发表于 2020-3-12 19:00
A:
B:
PS:大小限制真的蛋疼

这道题我还没通过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 15:24:39 | 显示全部楼层
_2_ 发表于 2020-3-13 12:44
这道题我还没通过

记录之前的情况,一个一个字符的遍历就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 20:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表