鱼C论坛

 找回密码
 立即注册
查看: 1396|回复: 6

[技术交流] 力扣上刷到的狠题

[复制链接]
发表于 2020-1-15 21:02:48 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 foxiangzun 于 2020-1-15 21:06 编辑

今天在力扣上刷到的一道“狠题”。。乍一看,人畜无害,貌似可以直接捡分,然鹅。。我好像太天真了。。话不多说,直接上题:

===================================题目分割线========================================

请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明:

假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为[2的31次幂 - 1, -2的31次幂]。如果数值超过这个范围,请返回 pow(2, 31) - 1。

示例1:
输入: "42"
输出: 42

示例2:
输入: "   -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
    我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

示例3:
输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。

示例4:
输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
     因此无法执行有效的转换。

示例5:
输入: "-91283472332"
输出: -2147483648
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
    因此返回 pow(-2, 31) 。

===================================题目分割线========================================

各位大侠,来试试身手吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-17 13:12:11 | 显示全部楼层
还行把,python甚至不需要考虑整形溢出的问题
  1. class Solution:
  2.     def myAtoi(self, str: str) -> int:
  3.         start=False
  4.         positive=True
  5.         ret=0
  6.         for c in str:
  7.             if (not start):
  8.                 if c==' ':
  9.                     continue;
  10.                 if c=='-':
  11.                     start=True
  12.                     positive=False
  13.                     continue;
  14.                 if c=='+':
  15.                     start=True
  16.                     continue
  17.                 if c.isnumeric():
  18.                     start=True
  19.             if not c.isnumeric():
  20.                 break
  21.             ret=ret*10+int(c);
  22.             if (ret>=pow(2,31)):
  23.                 break
  24.         if not positive:
  25.             ret=-ret
  26.         ret=max(-pow(2,31),ret)
  27.         ret=min(pow(2,31)-1,ret)
  28.         return ret
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-17 14:47:22 | 显示全部楼层
  1. import re

  2. def atoi(s):
  3.     Max = pow(2, 31) - 1
  4.     Min = pow(-2, 31)
  5.     s = s.lstrip()
  6.     res_m = re.match(r'[\+\-0-9]\d+', s)
  7.     if res_m:
  8.         n = int(res_m.group())
  9.         return Min if n < Min else Max if n > Max else n
  10.     return 0

  11. s = "42"
  12. print(atoi(s))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-19 09:11:30 | 显示全部楼层
Croper 发表于 2020-1-17 13:12
还行把,python甚至不需要考虑整形溢出的问题

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

使用道具 举报

 楼主| 发表于 2020-1-19 09:14:17 | 显示全部楼层

抱歉,兄dei,你的代码没执行过去,好像力扣上是不允许导包的。。而且会有运行时长的限制。。

这是题目链接,你点进去试试呗

https://leetcode-cn.com/problems/string-to-integer-atoi/submissions/
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-19 11:32:08 | 显示全部楼层
本帖最后由 yjsx86 于 2020-1-19 11:39 编辑
foxiangzun 发表于 2020-1-19 09:14
抱歉,兄dei,你的代码没执行过去,好像力扣上是不允许导包的。。而且会有运行时长的限制。。

这是题 ...


去leetcode看了下, 修改了点, 不是不能导包, 你上面的错误图只是提示变量 s 没有被申明
  1. class Solution:
  2.     def myAtoi(self, str: str) -> int:
  3.         Max = 2147483647
  4.         Min = -2147483648
  5.         str = str.lstrip()
  6.         res_m = re.match(r'[\+\-0-9](\d+)?', str)
  7.         try:
  8.             n = int(res_m.group())
  9.             return Min if n < Min else Max if n > Max else n
  10.         except :
  11.             return 0
复制代码

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

使用道具 举报

 楼主| 发表于 2020-1-20 09:12:01 | 显示全部楼层
yjsx86 发表于 2020-1-19 11:32
去leetcode看了下, 修改了点, 不是不能导包, 你上面的错误图只是提示变量 s 没有被申明

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 07:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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