“ 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法。主要内容如下:

  1. 题目

  2. 示例

  3. 解题

01

题目

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

02

示例

示例 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) 。     示例 6:输入: "    -4193 with words"输出: -4193

03

解题思路

算法推演:

算法中还要注意一点,本题涉及整数的运算,我们需要注意溢出。对于溢出的处理方式通常可以转换为 INT_MAX 的逆操作。比如判断某数乘 10 是否会溢出,那么就把该数和 INT_MAX 除 10 进行比较。

实现代码

class Solution {public:    int myAtoi(std::string s) {        // 变量定义        long long ans = 0;        int sign = 1;        // 1.去掉前导空格        int spaceEndPos = (int)s.find_first_not_of(" ");        int strLen = 0;        char* sptr = nullptr;        if (spaceEndPos == std::string::npos) {            sptr = const_cast<char*>(s.c_str());            strLen = (int)s.length();        } else {            sptr = const_cast<char*>(s.c_str()) + spaceEndPos;            strLen = (int)s.length() - spaceEndPos;        }        if (strLen <= 0) {            return 0;        }                // 2.判断第一个字符是否是符号位        if(sptr[0] == '-') {            sign = -1;        } else if (sptr[0] == '+') {            sign = 1;        } else if (!isdigit(sptr[0])) {            return 0;        } else {            ans = ans * 10 + (sptr[0] - '0');        }        ++sptr;        --strLen;                // 3.获取所有数字        for(int i = 0; i < strLen; ++i) {            if(isdigit(sptr[i])) {                long long temp = ans * 10 + (sptr[i] - '0');                if (temp > INT_MAX) {                    temp = (sign == 1 ? INT_MAX : -((long long)INT_MIN));                    ans = temp;                    break;                } else {                    ans = temp;                }            } else {                break;            }        }        return int(sign * ans);    }};

复杂度分析

时间复杂度: O(n) ,要遍历整个字符串

空间复杂度: O(1)

c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)相关推荐

  1. 32位有符号整数_[LeetCode] 8. 字符串转换整数 (atoi)

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

  2. 给定一个32位有符号整数,将整数中的数字进行翻转

    给定一个32位有符号整数,将整数中的数字进行翻转 解题思路就是不断的求模,然后取余,然后注意溢出问题: 代码: #include<stdlib.h> #include<stdio.h ...

  3. 32位有符号整数_008. 字符串转换整数 (atoi) | Leetcode题解

    点击上方"蓝色字体",选择"设为星标" 每天复习一道面试题,轻松拿大厂Offer~ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  4. c语言整形符号位_C语言中32位有符号整数如何定义

    展开全部 根据计算机系统.编译系统的不同,32位有符号整数的定义会略有差异,通常的做法32313133353236313431303231363533e59b9ee7ad943133343136363 ...

  5. 给定一个 32 位有符号整数,将整数中的数字进行反转。

    示例: 例如:给定数"456",需返回"654",给定"-876",则需返回"-678" 注意: 假设我们的环境只能存储 ...

  6. Verilog除法器(32位无符号+带符号)

    32位无符号除法器设计 恢复余数法: 恢复余数除法的基本思路是从"部分余数"中减去除数,如果结果为负(不够减),则恢复原来的部分余数,商0. 寄存器使用: reg_r 存放被除数a ...

  7. 【极限精度】基于stm32f4xx的蜂鸣器音乐播放(生日快乐)及国际绝对音名标准频率定义(32位无符号整型精度、十二等律体系、A4=440.01000Hz)

    [极限精度]基于stm32f4xx的蜂鸣器音乐播放(生日快乐)及国际绝对音名标准频率定义(32位无符号整型精度.十二等律体系.A4=440.01000Hz) 资源: download.csdn.net ...

  8. 【最新】国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.00000Hz)

    [最新]国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.00000Hz) #ifndef __MUSIC_NOTE_H__ #define __MUSIC ...

  9. 基于Python的国际绝对音名标准频率C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.01000Hz)

    基于Python的国际绝对音名标准频率C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.01000Hz) 代码如下: f = open('./PITCH.h', 'w') C=44001 ...

最新文章

  1. Shell 前后台任务
  2. java数组长度怎么求,含答案解析
  3. python散点图拟合曲线-python 绘制拟合曲线并加指定点标识的实现
  4. 通用寄存器的专门用途
  5. .NET开发人员如何开始使用ML.NET
  6. 通俗彻底解读批处理的延迟变量
  7. mongodb mongod 参数解释
  8. mac 硬盘读写速度测试 软件,使用适用于Windows / Mac的最佳10工具开始测试硬盘速度...
  9. shader变体是什么_一种Shader变体收集和打包编译优化的思路
  10. 图像取证:源识别和伪造检测(Image Forensics: source identification and tampering detection) 续2
  11. html修改progress背景色,html5 progress标签如何更改进度条颜色?progress进度条详解...
  12. CUE 文件及其格式说明
  13. 文通电脑版车牌识别软件,让违章驾车无处可躲
  14. 计算机室电源插座的配置及配电线路,小型机安装场地要求及机房环境电气要求讲课教案.pdf...
  15. 孙正义与马云的故事:马云就是他心目中的那个人
  16. 固体物理题库之名词解释
  17. AntV G6将节点修改成图片
  18. 正交设计(收集大牛的文章)
  19. word(1):word插入参考文献/引文并更新参考文献/引文编号
  20. java-php-python-ssm美容美发店会员管理系统计算机毕业设计

热门文章

  1. [OS复习]程序装入技术、简单存储管理技术
  2. sqlserver 中统计信息语句
  3. 【CyberSecurityLearning 70】DC系列之DC-1渗透测试(Drupal)
  4. 【CyberSecurityLearning 35】基础环境搭建
  5. SpringBoot退出登录,使session失效
  6. eclipse安装m2e.sourcelookup插件debug第三方源码(spring)
  7. centOS安装python
  8. 去中心化钱包CoinU下载教程(如何下载C)
  9. EOS从入门到精通-设计背景与DPOS算法(文字稿)
  10. Android应用安全之Content Provider安全