c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)
“ 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法。主要内容如下:
题目
示例
解题
”
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)相关推荐
- 32位有符号整数_[LeetCode] 8. 字符串转换整数 (atoi)
题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- 给定一个32位有符号整数,将整数中的数字进行翻转
给定一个32位有符号整数,将整数中的数字进行翻转 解题思路就是不断的求模,然后取余,然后注意溢出问题: 代码: #include<stdlib.h> #include<stdio.h ...
- 32位有符号整数_008. 字符串转换整数 (atoi) | Leetcode题解
点击上方"蓝色字体",选择"设为星标" 每天复习一道面试题,轻松拿大厂Offer~ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- c语言整形符号位_C语言中32位有符号整数如何定义
展开全部 根据计算机系统.编译系统的不同,32位有符号整数的定义会略有差异,通常的做法32313133353236313431303231363533e59b9ee7ad943133343136363 ...
- 给定一个 32 位有符号整数,将整数中的数字进行反转。
示例: 例如:给定数"456",需返回"654",给定"-876",则需返回"-678" 注意: 假设我们的环境只能存储 ...
- Verilog除法器(32位无符号+带符号)
32位无符号除法器设计 恢复余数法: 恢复余数除法的基本思路是从"部分余数"中减去除数,如果结果为负(不够减),则恢复原来的部分余数,商0. 寄存器使用: reg_r 存放被除数a ...
- 【极限精度】基于stm32f4xx的蜂鸣器音乐播放(生日快乐)及国际绝对音名标准频率定义(32位无符号整型精度、十二等律体系、A4=440.01000Hz)
[极限精度]基于stm32f4xx的蜂鸣器音乐播放(生日快乐)及国际绝对音名标准频率定义(32位无符号整型精度.十二等律体系.A4=440.01000Hz) 资源: download.csdn.net ...
- 【最新】国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.00000Hz)
[最新]国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.00000Hz) #ifndef __MUSIC_NOTE_H__ #define __MUSIC ...
- 基于Python的国际绝对音名标准频率C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.01000Hz)
基于Python的国际绝对音名标准频率C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.01000Hz) 代码如下: f = open('./PITCH.h', 'w') C=44001 ...
最新文章
- Shell 前后台任务
- java数组长度怎么求,含答案解析
- python散点图拟合曲线-python 绘制拟合曲线并加指定点标识的实现
- 通用寄存器的专门用途
- .NET开发人员如何开始使用ML.NET
- 通俗彻底解读批处理的延迟变量
- mongodb mongod 参数解释
- mac 硬盘读写速度测试 软件,使用适用于Windows / Mac的最佳10工具开始测试硬盘速度...
- shader变体是什么_一种Shader变体收集和打包编译优化的思路
- 图像取证:源识别和伪造检测(Image Forensics: source identification and tampering detection) 续2
- html修改progress背景色,html5 progress标签如何更改进度条颜色?progress进度条详解...
- CUE 文件及其格式说明
- 文通电脑版车牌识别软件,让违章驾车无处可躲
- 计算机室电源插座的配置及配电线路,小型机安装场地要求及机房环境电气要求讲课教案.pdf...
- 孙正义与马云的故事:马云就是他心目中的那个人
- 固体物理题库之名词解释
- AntV G6将节点修改成图片
- 正交设计(收集大牛的文章)
- word(1):word插入参考文献/引文并更新参考文献/引文编号
- java-php-python-ssm美容美发店会员管理系统计算机毕业设计
热门文章
- [OS复习]程序装入技术、简单存储管理技术
- sqlserver 中统计信息语句
- 【CyberSecurityLearning 70】DC系列之DC-1渗透测试(Drupal)
- 【CyberSecurityLearning 35】基础环境搭建
- SpringBoot退出登录,使session失效
- eclipse安装m2e.sourcelookup插件debug第三方源码(spring)
- centOS安装python
- 去中心化钱包CoinU下载教程(如何下载C)
- EOS从入门到精通-设计背景与DPOS算法(文字稿)
- Android应用安全之Content Provider安全