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. sql server 建表,主键与外键约束

    主键: 能唯一区分表中每一行 外键:为某表的一列,是另一个表的主键,外键定义了两表之间的联系 商品类别表 use eshopgocreate table category( name varchar( ...

  2. LeetCode 230.二叉树中第k小的元素

    题目: 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. 这道题在leetCode上难 ...

  3. lcx端口转发

    目录 0x01 正向端口转发 0x02 反向端口转发 0x03 msf正向shell 0x04 msf反向shell 注: 边界机器 win08 192.168.222.175 内网机器 win7 1 ...

  4. 导出 mysql 数据到 redis

    决定你要导入到 redis 的数据类型 假设我的表 t_user 的结构为 列名 注释 类型 name 名称 varchar idcard 身份证号 varchar phone 手机号 varchar ...

  5. HNU_小初高数学学习软件_功能说明

    结对编程项目主要功能: 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功.密码6-1 ...

  6. 基于操作系统原理的Linux 系统的安装

    一.实验目的 1.了解Linux操作系统的发行版本. 2.掌握Red Hat Linux 9.0的安装方法. (可用Red Hat Linux 5.0版本替代9.0版本) 3.了解Linux其他版本( ...

  7. volatile 关键字的作用

    简介Java 语言提供了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程.volatile 变量具备两种特性:变量可见性.禁止重排序. 作为同步锁在访问 vola ...

  8. Angular 样式绑定

    1. style.propertyName [style.Css属性名] = 'Css属性值变量'/"'css属性值'" // app.component.ts export cl ...

  9. 为什么要学习go语言

    终于等到你!Go语言--让你用写Python代码的开发效率编写C语言代码. 为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了,为什么又出来一个Go语言? 硬件限制:摩尔定律已然失效 摩尔 ...

  10. shell命令大全笔记

    ## -print 将匹配的文件输出到标准输出## -exec 将匹配的文件执行该参数所给出的shell命令## -ok 将匹配的文件执行该参数所给出的shell命令,每次执行命令有提示 #----- ...