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

LC 8、字符串转换整数(atoi)

时间:2023-07-31 14:23:20浏览次数:39  
标签:字符 LC INT 42 整数 atoi 读入 字符串 231

LC 8、字符串转换整数(atoi)

题目描述

Leetcode上的 8、字符串转换整数(atoi),难度为 中等

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

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

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

注意:

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

示例:

输入:s = "42"

输出:42

解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。

第 1 步:"42"(当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"42"(读入 "42")
           ^
解析得到整数 42 。
由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。

朴素解法

这是以到模拟题

我们可以根据题目要求,直接进行流水线处理

请注意,我们需要 进行溢值判定

代码;

#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)
class Solution {
public:
    int myAtoi(string s) {
        //去除前导空格
        while(s[0] == ' ') s.erase(s.begin());
        int flag = 1;
        //确定字符
        if(s[0] == '+' || s[0] == '-') {
            flag = s[0] == '+' ? 1 : -1;
            s.erase(s.begin());
        }
        long long a = 0;
        while(s[0] >= '0' && s[0] <= '9'){
            if (flag > 0 && a > (INT_MAX - (s[0] - '0')) / 10) return INT_MAX;
            if (flag < 0 && -a < (INT_MIN + (s[0] - '0')) / 10) return INT_MIN;
            a = a * 10 + (s[0] - '0');
            s.erase(s.begin());
        }
        if(flag > 0) return int(a) == a ? a : INT_MAX;
        else return int(-a) == -a ? -a : INT_MIN; 

    }
};

时间复杂度:对整个字符串 s扫描了一遍,复杂度为O(n)

空间复杂度:O(1)

Label:模拟

标签:字符,LC,INT,42,整数,atoi,读入,字符串,231
From: https://www.cnblogs.com/superJade/p/17593322.html

相关文章

  • LC 7、整数反转
    LC7、整数反转题目描述这是LeetCode上的7、整数反转,难度为简单给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[−231,231−1],就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例:输入:x=12......
  • 字符串基础
    几乎所有字符串算法都存在一个共性:基于所求信息的特殊性质与已经求出的信息,使用增量法与势能分析求得所有信息。这体现了动态规划思想。Manacher很好地证明了这一点:它维护所求得的最右回文子串的回文中心\(d\)与回文半径\(r\),利用回文性质通过均摊右端点移动距离在线性时间内......
  • mysql 字符串包含某个字符
    MySQL字符串包含某个字符在MySQL中,我们常常需要对字符串进行各种操作,包括判断一个字符串是否包含某个字符。本文将介绍如何使用MySQL语句来判断字符串是否包含某个字符,以及提供相应的代码示例。使用LIKE语句MySQL中提供了LIKE语句来判断一个字符串是否包含某个字符。LIKE语句是......
  • python 接口返回存储json字符串包含\n
    实现“python接口返回存储json字符串包含\n”的步骤为了实现接口返回存储包含特殊字符\n的JSON字符串,我们需要按照以下步骤进行操作:步骤描述1创建一个Python接口2生成包含特殊字符\n的JSON字符串3返回JSON字符串现在,让我们一步步实现这个过程。步骤1:创建......
  • Flutter 3.0+ 利用VLC播放器使用rtsp协议,本地测试和打包压缩
    Flutter中使用rtsp协议在Flutter中可以集成VLC播放器通过rtsp协议连接到监控相机来实现远程监控,当然也可以用来做直播APP。使用flutter_vlc_player库扩展包地址点我跳转。首先在pubspec.yaml中添加库引用:dependencies:flutter_vlc_player:^7.2.0安卓端配......
  • PascalCase & camelCase & kebabCase介绍
    原文链接:https://www.cnblogs.com/qdkfyym/p/13528076.html一、PascalCase  帕斯卡拼写法(也叫大骆驼拼写法)  PascalCase 帕斯卡拼写法是一种计算机编程中的变量命名方法。它主要的特点是将描述变量作用所有单词的首字母大写,然后直接连接起来,单词之间没有连接符。比......
  • 【ACM专项练习#02】整行字符串、输入vector、打印图形、处理n组数据以及链表操作等
    输入整行字符串平均绩点题目描述每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。输入有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。输出每组输出结果占一行。如果输入的大......
  • RS485转ETHERCAT连接支持ethercat总线的PLC
    我们将为大家介绍一款强大的设备——捷米JM-ECT-RS485/232通讯网关。这是一款自主研发的ETHERCAT从站功能的网关,它能够将ETHERCAT网络和RS485或RS232设备无缝连接。这款网关在ETHERCAT总线和RS485或RS232总线中均能发挥主站或从站的作用。它的最大特点就是解决了协议不兼容的问题......
  • P3375 【模板】KMP 字符串匹配 题解
    前言狗屁不是,建议别看!!! 题目链接P3375【模板】KMP字符串匹配-洛谷|计算机科学教育新生态(luogu.com.cn) 分析先给个例子s1:ABCABCABBs2:ABCABB若使用朴素算法匹配,当匹配到s1:ABCABCABBs2:ABCABB时,朴素算法会跳出,然后匹配下一位。最终匹配到s1:ABCABCABBs2:......
  • Welcome
    您好,欢迎您来到我的博客,我是一个来自中国的信息学竞赛选手。您可以在这些地方找到我:洛谷博客园CodeforcesGithubHydro祝您生活愉快!......