技术标签: LeetCode 中等 Medium python3 正则表达式re LeetCode
今天是中等题第5道题。实现一个 atoi
函数,使其能将字符串转换成整数。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
题目:请你来实现一个 atoi
函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。在任何情况下,若函数不能进行有效的转换时,请返回 0。
说明:
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,qing返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
输入: "42" 输出: 42
示例 2:
输入: " -42" 输出: -42 解释: 第一个非空白字符为 '-', 它是一个负号。我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
示例 3:
输入: "4193 with words" 输出: 4193 解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
示例 4:
输入: "words and 987" 输出: 0 解释: 第一个非空字符是 'w', 但它不是数字或正、负号。因此无法执行有效的转换。
示例 5:
输入: "-91283472332" 输出: -2147483648 解释: 数字 "-91283472332" 超过 32 位有符号整数范围。因此返回 INT_MIN (−231) 。
解法1。先用正则表达式匹配,得到一个list,取list的第一个元素,就是我们要的数字及其符号,然后做符号判断、上下界判断,建议大家好好看一下下面的正则表达式的内容,代码如下。
执行用时: 76 ms, 在String to Integer (atoi)的Python3提交中击败了82.35% 的用户
class Solution:
def myAtoi(self, str: str) -> int:
import re
# 正则表达式为了确保符号或数字在最开始,而不是其他字符,所以要用^这个符号
res_s = re.findall('^[+-]?[0-9]+', str.strip())
if res_s:
res_str = res_s[0]
sign = 1
i = 0
res = 0
if res_str[0] in ['+','-']:
sign = -1 if res_str[0] == '-' else 1
i += 1
while i < len(res_str) and '0' <= res_str[i] and res_str[i] <= '9':
res = res*10 + (ord(res_str[i]) - ord('0'))
i += 1
if res*sign > 2147483647:
return 2147483647
elif res*sign < -2147483648:
return -2147483648
return res*sign
return 0
# 上述代码有另一种正则表达式的做法,用match,不用做符号判断
pattern = r"[\s]*[+-]?[\d]+"
match = re.match(pattern, str)
if match:
res = int(match.group(0))
if res > 2 ** 31 - 1:
res = 2 ** 31 -1
if res < - 2 ** 31:
res = - 2 ** 31
else:
res = 0
return res
解法2。 常规解法,遍历
class Solution:
def myAtoi(self, str: str) -> int:
str = str.strip().rstrip()
if not str:
return 0
res = 0
sign = -1 if str[0] == '-' else 1
i = 1 if str[0] in ['+','-'] else 0
while i < len(str) and str[i] >= '0' and str[i] <='9':
res = res*10 + (ord(str[i])-ord('0'))
i += 1
# 注意要乘符号,注意是放在res更新之后
if res*sign > 2147483647:
return 2147483647
elif res*sign < -2147483648:
return -2147483648
return res*sign
解法1:https://blog.csdn.net/chenhua1125/article/details/80465301
文章浏览阅读2.6k次。opencv-python 4.2.0.32版本 cv2.imshow 在 mac上只显示窗口,不显示图片内容的bug,回退到4.1.2.30版本已经ok;pip install opencv-python==4.1.2.30_不满足软件包要求opencv_python==4.1.2.30
文章浏览阅读7.4k次。搜索框示意图:从图中可以看出,有两个关键值第一个值:选择框值:searchtype然后看到有2个值:articlename(文章名称)、author(文章作者),这就意味着searchtype=articlename为搜索文章关键字 searchtype=author时为搜索作者关键字第二个值:searchkey 这个就是关键字值 searchkey=%@ 这样就..._爱阅书香怎么制作书源
文章浏览阅读486次。库地址:https://github.com/JakeWharton/DiskLruCache简介:DiskLruCache一个硬盘缓存管理工具,为了保持原有空间的大小,其算法是最近最少使用算法。它把最近使用的对象用“强引用”存储在LinkedHashMap.并且把最近最少使用的对象在缓存值达到预设定值之前就从磁盘中移除其构造函数如下:private DiskLruCache(File direct_jakewharton/disklrucache
文章浏览阅读8.5k次,点赞12次,收藏31次。文章目录深度学习端到端的概念端到端优点端到端缺点同一网络结构的算法为啥可以用在很多问题上深度学习端到端的概念端到端模型就是将可以多步骤/模块解决的任务使用单个模型来建模解决,一般在深度学习中比较常见。使用多步骤、多模型解决一个复杂任务的时候,一个明显的弊端是各个模块训练目标不一致,某个模块的目标函数可能与系统的宏观目标有偏差,这样训练出来的系统最终很难达到最优的性能;另一个问题是误差的累积,前..._端到端的优势
文章浏览阅读6.2k次,点赞4次,收藏15次。背景与简述背景使用nosql作多表操作时很麻烦的,所以平时都没使用过多表,但最近遇到一个项目必须使用多表,没法,就研究了一下mongodb的多表联查功能. mongodb的多表联查主要通过聚合完场,使用的是关键子lookup,而后续处理中lookup,而后续处理中lookup,而后续处理中unwind则是关键的一环.以下是这次研究的记录:版本mongodb:3.6 spring..._spring data mongodb 多表关联
文章浏览阅读157次。悬在头顶的“达摩克利斯之剑”随着 VS Code Java 的功能逐渐丰富,用户数量也在稳步上升。但是由于 Java 插件在导入项目时,会在项目目录下生成元数据文_java 微软project
文章浏览阅读1k次,点赞34次,收藏25次。在实现综合计数器之前,大家应该先了解一下什么是前中后缀表达式前缀、中缀和后缀表达式是表示数学表达式的三种不同方式。前缀表达式(也称为波兰式或前缀记法):操作符位于操作数之前。例如,"+ 2 3"表示加法操作,其中2和3是操作数。中缀表达式:操作符位于操作数之间。这是我们通常使用的数学表达式表示方式。例如,"2 + 3"表示加法操作,其中2和3是操作数。后缀表达式(也称为逆波兰式或后缀记法):操作符位于操作数之后。例如,"2 3 +"表示加法操作,其中2和3是操作数。
文章浏览阅读771次。字符串hash//#pragma comment(linker, "/STACK:102400000,102400000")#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#def
文章浏览阅读3.5k次。看论文理解http://www.docin.com/p-912146197.html_bonferroni检验方法
文章浏览阅读1w次。有的时候会发现IDEA的控制台不打印日志,有时候打印,这是为什么呢。我遇到的一种原因是:其实打印了日志,你没注意而已。原因如果日志太长,则会缩成 <1 internal call>点开后就是完整的日志。如图点开后另外一个证据是,将很长的内容的字段注释掉后,就会打印完整的,如图..._idead的server不打印日志
文章浏览阅读1.6k次,点赞42次,收藏29次。MAC地址漂移是指:在同一个VLAN内,一个MAC地址有两个出接口,并且后学习到的出接口覆盖原出接口的现象。这是官方定义,通俗的讲,MAC地址漂移指的是MAC地址表项的出接口发生了变更图文转自:知乎[icon-MAC地址漂移是指交换机上一个VLAN内有两个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象。同一个mac地址在不同地方学到了当一个MAC地址在两个端口之间频繁发生迁移时,即会产生MAC地址漂移现象。_以太网交换机mac
文章浏览阅读4.2k次,点赞8次,收藏32次。分布式机器学习&联邦学习论文阅读笔记一、开源框架FedML二、数据异构问题FedProxBridging Median and Mean Algorithms(NeurIPS 2020)三、边缘计算负载问题FedGKT(NeurIPS 2020)四、通信量压缩FetchSGD(ICML 2020)五、个性化联邦学习Ditto(ICML 2021)pFedHN(ICML2021)一、开源框架FedMLhttps://github.com/FedML-AI/FedML二、数据异构问题FedPr_分布式机器学习论文