Leetcode(8)字符串转换整数

[题目表述]:

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

  • 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
  • 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
  • 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
  • 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
  • 在任何情况下,若函数不能进行有效的转换时,请返回 0。

第一次:正常顺序

执行用时:44 ms; 内存消耗:11.7MB 效果:还行

class Solution(object):
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
a=0
res=""
for i in str:
if i==' ' and len(res)==0:
continue
elif ((i=='+' or i=='-') and len(res)==0) or (i>='0' and i<='9'):
res+=i
else: break
if len(res)==0:
return 0
if res[0]=='-' or res[0]=='+':
if len(res)!=1:
if res[0]=='-':
a=-int(res[1:])
else:
a=int(res[1:])
else: return 0
else: a=int(res)
if a>2**31-1:
return 2**31-1
elif a<-2**31:
return -2**31
return a

学习

  • 切片

第二种方法:正则表达式

执行时间:96 ms; 内存消耗:13.4MB 效果:一般

class Solution:
def myAtoi(self, strs: str) -> int:
import re
str_strip_blank = strs.lstrip(' ')
if not str_strip_blank:
return 0
num_str = re.search(r'^[-+]?\d+', str_strip_blank) ##还未学正则表达式
if num_str:
num = int(num_str.group())
if num < -2147483648:
return -2147483648
elif num > 2147483647:
return 2147483647
return int(num)
return 0

学习

  • str.strip() 移除头尾指定字符 str.lstrip() 只移除头 str.rstrip() 只移除尾

  • 正则表达式模块re

  • re.search() 返回给定字符串中寻找第一个匹配给定正则表达式的子字符串 re为默认规则

    第一个参数为正则表达式,匹配成功则返回匹配值,不成功则返回None

    第二个参数为父字符串,

    第三个参数为标致位,用于控制正则表达式的匹配方式。

  • num_str.group() 返回匹配后所有成员 可以用索引方式 num_str.group[0]等

第三种方法:字典

执行用时:60 ms; 内存消耗:13.2MB 效果:还行

class Solution:
def myAtoi(self, strs: str) -> int:
str_strip_blank = strs.lstrip(' ')
if not str_strip_blank:
return 0 valid_start = {'+': 0, '-': 0}
valid_num = {'0': 0, '1': 0, '2': 0, '3': 0,
'4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0}
if str_strip_blank[0] not in valid_start and str_strip_blank[0] not in valid_num:
return 0
start = 0
if str_strip_blank[0] in valid_start:
start = 1 index = 0
for each in str_strip_blank[start:]:
if each in valid_num:
index += 1
else:
break
if index:
num = int(str_strip_blank[0:index+start])
if num < -2147483648:
return -2147483648
elif num > 2147483647:
return 2147483647
return int(num)
return 0

学习

  • 通过构造字典,不用用Ascll码去规划范围
  • 用索引去设置(因为中间不会有其他字符隔断 否则得申请res

Leetcode(8)字符串转换整数的更多相关文章

  1. 前端与算法 leetcode 8. 字符串转换整数 (atoi)

    目录 # 前端与算法 leetcode 8. 字符串转换整数 (atoi) 题目描述 概要 提示 解析 解法一:正则 解法二:api 解法二:手搓一个api 算法 传入测试用例的运行结果 执行结果 G ...

  2. LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))

    8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...

  3. Java实现 LeetCode 8 字符串转换整数(atoi)

    8. 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...

  4. [LeetCode] 8. 字符串转换整数 (atoi)

    题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  5. 每日一题LeetCode 8. 字符串转换整数 (atoi)

    问题描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将 ...

  6. LeetCode 8.字符串转换整数 (atoi)(Python3)

    题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...

  7. LeetCode Golang 8. 字符串转换整数 (atoi)

    8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...

  8. 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)

    字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...

  9. 17、字符串转换整数 (atoi)

    17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...

随机推荐

  1. Mysql高手系列 - 第13篇:细说NULL导致的神坑,让人防不胜防

    这是Mysql系列第13篇. 环境:mysql5.7.25,cmd命令中进行演示. 当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免? ...

  2. 云服务器 ECS Linux 系统 MySQL 备份的导入导出

    MySQL 备份的导出 注意: 如果您使用的是帮助中心的一键环境配置,那么 MySQL 的安装目录是 /alidata/server/mysql. 如果您将 MySQL 安装到其他目录,您需要输入您 ...

  3. class命名归类

    常见class关键词: 布局类:header, footer, container, main, content, aside, page, section 包裹类:wrap, inner 区块类:r ...

  4. Java StringTokenizer 类使用方法

    Java StringTokenizer 属于 java.util 包,用于分隔字符串. StringTokenizer 构造方法: 1. StringTokenizer(String str) :构 ...

  5. Tomcat+Nginx+Linux+Mysql部署豆瓣TOP250的项目到腾讯云服务器

    写在前面 因为前面有写过一篇关于豆瓣的top250的电影的可视化展示项目,你可以移步http://blog.csdn.net/liuge36/article/details/78607955了解这个项 ...

  6. 23种设计模式之模板方法(Template Pattern)

    定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 AbstractClass:抽象类.用来定义算法骨架和原语操作,在这个类里 ...

  7. tomcat配置目录及安装说明

    1.升级jdk版本 java -version 查看当前java版本 上传最新版jdk tar xf jdk-8u191-linux-x64.tar.gz 解压jdk到当前下 mv jdk1.8.0_ ...

  8. linux 配置多个tomcat

    一.安装tomcat 1.下载链接:https://tomcat.apache.org/download-70.cgi,选择需要的版本下载(.tar.gz文件后缀) 2.通过Xshell.Xftp上传 ...

  9. Python采集VIP收费QQ音乐,一起来听周董最新的《说好不哭》,省3块不香吗?

    环境: windows python3.6.5 模块: requests selenium json re urllib 环境与模块介绍完毕后,就可以来实行我们的操作了. 第1步: 通过一个解析网站: ...

  10. MongoDB 基础教程CURD帮助类

    最近两天在学习MongoDB,强大的文档数据库.给我最大的感觉就是相比于SQL或者MSQ等传统的关系型数据库,在使用和配置上真的是简化了很多.无论是在集群的配置还是故障转移方面,都省去了许多繁琐的步骤 ...