首页 > 其他分享 >字符串转换整数 (atoi)

字符串转换整数 (atoi)

时间:2023-04-16 20:01:26浏览次数:39  
标签:字符 42 4193 整数 atoi 读入 字符串 231

题目描述

难度中等

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1
  6. 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ' '
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:

输入:s = "42"
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:"42"(当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"42"(读入 "42")
           ^
解析得到整数 42 。
由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。

示例 2:

输入:s = "   -42"
输出:-42
解释:
第 1 步:"   -42"(读入前导空格,但忽视掉)
            ^
第 2 步:"   -42"(读入 '-' 字符,所以结果应该是负数)
             ^
第 3 步:"   -42"(读入 "42")
               ^
解析得到整数 -42 。
由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。

示例 3:

输入:s = "4193 with words"
输出:4193
解释:
第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)
             ^
解析得到整数 4193 。
由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。

提示:

  • 0 <= s.length <= 200
  • s 由英文字母(大写和小写)、数字(0-9)、' ''+''-''.' 组成

解题步骤

时间复杂度和空间复杂度都是\(O(n)\)。

class Solution:
    def myAtoi(self, s: str) -> int:
        res = 0
        s = s.strip()
        if s == "":
            return 0
        if s[0] == "-":
            flag = -1
            s = s[1:]
        elif s[0] == "+":
            flag = 1
            s = s[1:]
        else:
            flag = 1

        for i in s:
            if i not in ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]:
                break
            res *= 10
            res += int(i)
        if flag * res < -2**31:
            return -2**31
        if flag * res > 2 ** 31 - 1:
            return 2 ** 31 - 1
        return res * flag

标签:字符,42,4193,整数,atoi,读入,字符串,231
From: https://www.cnblogs.com/crazypigf/p/17323924.html

相关文章

  • 整数反转
    题目描述难度中等给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[−231,231−1],就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输出:-321......
  • js 传递汉字 乱码_JavaScript 字符串反转乱码问题解决
    https://blog.csdn.net/weixin_36483301/article/details/113451892emoji表情和非常用字实际解决中文编码问题,可以通过解码解决js中使用decodeURL即可解决......
  • 求两个整数的平均值
    1普通实现1求两个整数的平均值,最简单的实现方法就是两个数相加再除以二。intmean(intx,inty){return(x+y)/2;}如果mean的参数是INT_MAX呢?就溢出了.2普通实现2我们使用右移运算符。intmean1(intx,inty){return(x+y)>>1;}类似3普通实现3那么......
  • javascript 把嵌套的 map 转成 object,再转 json 字符串
    使用JSON.stringify转map时发现并没有转成想要的JSON数据,搜索发现要转成Object才能够转成完整的JSON,用递归转换:constconvertNestedMapToObject=(map)=>{if(mapinstanceofMap){map.forEach((v,k)=>{......
  • linux中截取字符串中指定字符之前的内容
     001、root@DESKTOP-IDT9S0E:/home/test/test/test#str1="Homo_sapiens.GRCh38.99.chgffromosome.22.gff3"root@DESKTOP-IDT9S0E:/home/test/test/test#str2=${str1%.*}##截取最后一个.之前的内容root@DESKTOP-IDT9S0E:/home/test/test/test#echo$str2Homo_sapiens......
  • 整数平方和开根号的性能优化
    整数的平方和开根号操作通过sqrt实现性能已经不容易优化,但如果要求精度不高,可以进一步优化,方法有三种:1、isqrt;2、查表法;3、三角函数法1、isqrt即整数平方根,有多种算法。通过询问ChatGPT,AI给出了几种实现,这里取一种比较快的实现:1u32isqrt2(u32x)2{3u32res=0;......
  • Python实现字符串模糊匹配
      在一个字符串中,有时需对其中某些内容进行模糊匹配以实现条件的判定,如在“你好,hello,world”中判断是否含有“llo”。Python中通过re.search()方法实现,特别地,对于首位起始的内容匹配,也可通过re.match()方法实现。若匹配成功,它们返回一个re.Match对象;若匹配失败,返回None。re.s......
  • shell字符串
    8shell字符串详解没有引号、单引号、双引号区别:单引号:只能存字符串,变量无效。并且里面不能再出现单引号双引号:变量有效,可以出现多个双引号支持转义没有引号:变量有效,但需要连接在一起 获取字符串长度:${#name} 9字符串连接#!/bin/bashname="Shell"url="http://c.bia......
  • 总结与归纳之字符串
    (大的不能在大的坑)前言总论+前置芝士正文字符串哈希KMP算法传统KMP算法Z函数fail树KMP自动机Trie与AC自动机普通Trie01Trie可持久化TrieAC自动机SA相关SA传统SAM广义SAM后缀平衡树ManacherPAM序列自动机最小表示法玄学:Lyndon分解总结......
  • shell命令--字符串截取
    shell截取字符串通常有两种方式:截取指定长度的字符串和截取指定模式的字符串。1.截取指定长度的字符串这种方式除了需要指定起始位置还需要指定截取长度。按起始位置可以分为从左边开始或者从右边开始。a.从左边开始截取${string:start:length}其中,string是要截取的字符......