鱼C论坛

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

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

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

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

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

x
本帖最后由 _2_ 于 2020-2-6 19:39 编辑
  1. class Solution:
  2.     def myAtoi(self, str: str) -> int:
  3.         """
  4.         8. 字符串转换整数 (atoi)
  5.         https://leetcode-cn.com/problems/string-to-integer-atoi/
  6.         """
  7.         try:
  8.             a = int(str)
  9.             if a < (INT_MIN := pow(2,-31)):
  10.                 return INT_MIN
  11.             elif a > (INT_MAX := pow(2,31) - 1)
  12.                 return INT_MAX
  13.             else:
  14.                 return a
  15.         except ValueError:
  16.             a = iter(str)
  17.             b = [i for i in a]
  18.             if isinstance(b[0],str):
  19.                 return 0
  20.             elif isinstance(b[0],int):
  21.                 d = iter(b)
  22.                 e = []
  23.                 while 1:
  24.                     f = next(d)
  25.                     if type(e) == "<class 'int'>":
  26.                         e.append(f)
  27.                         continue
  28.                     else:
  29.                         break
  30.                         return int("".join(e))
复制代码


感觉写的有点乱啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-6 18:41:27 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 18:41:28 | 显示全部楼层
这题我根本没做出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

没登录,也不知道对不对,拜托你测试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

Invalid syntax
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


type() 不是字符串

  1.                     else:
  2.                         break
  3.                         return int("".join(e))
复制代码


你是怎么想的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

判断类型
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


这样岂不是更好?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

那我改一下吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

已改,用的 isinstance()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好久没刷题了,找一个简单的练练手感
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 22:54:19 | 显示全部楼层
  1. class Solution:
  2.     def myAtoi(self, str: str) -> int:
  3.         """
  4.         8. 字符串转换整数 (atoi)
  5.         https://leetcode-cn.com/problems/string-to-integer-atoi/
  6.         """
  7.         try:
  8.             a = int(str)
  9.             INT_MIN = pow(-2,31)
  10.             INT_MAX = pow(2,31)-1
  11.             if a < INT_MIN:
  12.                 return INT_MIN
  13.             elif a > INT_MAX:
  14.                 return INT_MAX
  15.             else:
  16.                 return a
  17.         except ValueError:
  18.             a = str.lstrip(" ")
  19.             if a in ['+','-','']: #这些不好处理,笑哭
  20.                 return 0
  21.             b = [i for i in a]
  22.             if b[0].isnumeric() or b[0] in ['+','-']:
  23.                 c = iter(b)
  24.                 e = []
  25.                 while 1:
  26.                     f = next(c)
  27.                     if f.isnumeric():  
  28.                     #本质上"1"也是字符串,不能用type或isinstance方法判断
  29.                         e.append(f)
  30.                         continue
  31.                     else:
  32.                         break
  33.                 if e[0] == "+":  #正号不好转化,先去
  34.                     del e[0]
  35.                 a = int("".join(e))
  36.             else:
  37.                 return 0
复制代码

帮你修改了一下,这个代码还有点问题,我自己已经改好了
执行发生错误案例"+-3"
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不止这个问题,你要再思考一下了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. class Solution:
  3.     def myAtoi(self, str: str) -> int:
  4.         Atoi=False
  5.         List=[]
  6.         sign=True
  7.         
  8.         for i in str:
  9.             if Atoi:
  10.                 if i.isdigit():
  11.                     List.append(int(i))
  12.                     
  13.                 else:
  14.                     break
  15.                     
  16.             else:
  17.                 if i.isdigit():
  18.                     Atoi=True
  19.                     List.append(int(i))
  20.                     
  21.                 elif i=='-':
  22.                     sign=False
  23.                     Atoi=True
  24.                     
  25.                 elif i=='+':
  26.                     Atoi=True
  27.                     
  28.                 elif i==' ':
  29.                     pass
  30.                     
  31.                 else:
  32.                     return 0
  33.                
  34.         
  35.         res=reduce(lambda x,y:x*10+y,List,0)
  36.         return min(res,2147483647)if sign else max(-2147483648,-res)
复制代码
1079 / 1079 个通过测试用例
状态:通过
执行用时:44 ms
内存消耗:13.4 MB
提交时间:0 分钟之前

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

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

PS:大小限制真的蛋疼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这道题我还没通过
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

记录之前的情况,一个一个字符的遍历就好了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 22:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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