Leetcode错题本1-实现一个 atoi 函数,使其能将字符串转换成整数。
题目描述
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
提示:
本题中的空白字符只包括空格字符 ’ ’ 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 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) 。
leetcode链接:https://leetcode-cn.com/problems/string-to-integer-atoi
题意分析
1、字符串转整数,因此,要用到以下的步骤:
string str = {'12345678'};
int num,;
int ans = 0;
for(int i = 0;i < str.length(); i++){nums = str[i] - '0';ans = ans * 10 + nums;
}
2、考虑边界情况
1、假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
2、 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231)
3、实现代码(这里使用的是C++,在必要的地方代码中有注释)
class Solution {public:int myAtoi(string str) {const char *p = str.c_str(); // char* 形式传回 string 内含字符串for(; p != nullptr && *p == ' '; p++) {} // 去除字符串中的“ ”if(p == nullptr || (*p != '+' && *p != '-' && (*p < '0' || *p > '9'))) { //判断首个输入的字符是不是数字或者‘+’ ‘-’return 0;}int res = 0, flag = 1; //使用flag 作为正负的标记if(*p == '-') {flag = -1;p++;} else if(*p == '+') {p++;}int MAX = (((1 << 30)-1)<<1) + 1; //使用位运算表示最大值 和最小值 int MIN = -MAX-1;for(; '0' <= *p && *p <= '9'; p++) {if((MAX-(*p-'0')) / 10 < res) { // 如果直接用res *10 + *p-'0' > MAX 判断,会导致越界,程序无法运行,所以进行转换if(flag == -1) {return MIN;} else {return MAX;}}(res *= 10) += *p-'0';}return res * flag;}
};
Leetcode错题本1-实现一个 atoi 函数,使其能将字符串转换成整数。相关推荐
- 如何把一个字符串转换成整数
剑指offer第一章的例子,据说是微软的面试题,发现自己又躺枪了.字符串处理有多烦人不用我多说了吧. //基础版代码 int StrToInt(char* string) {int number = ...
- 程序员面试题精选100题(17)-把字符串转换成整数[算法]
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345. 分析:这道题尽管不是很难,学过C/C++语言一般都能实现基本功能,但不同程 ...
- 在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...
点击专辑上方"蓝字"关注我吧 题目难度: 中等 原题链接[1] 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ ...
- leetcode —— 面试题67. 把字符串转换成整数
写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到 ...
- 把字符串转换成整数(atoi)
题目 描述 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数.传入的字符串可能有以下部分组成: 1.若干空格 2.(可选)一个符号字符('+' 或 ...
- 【LeetCode】剑指 Offer 67. 把字符串转换成整数
[LeetCode]剑指 Offer 67. 把字符串转换成整数 文章目录 [LeetCode]剑指 Offer 67. 把字符串转换成整数 package offer;public class So ...
- 【每日一题】字符串转换成整数
题目来源 牛客网 链接:字符串转换成整数 题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0. 输入描述: 输入一个字符串,包括数 ...
- 编程题:将字符串转换成整数 C++实现
First:按照题目要求将一个字符串转换成一个整数,首先忽略掉前面的"+""-"后,主要的逻辑就是将字符串 中的元素一个一个拿出来转换成整数然后循环乘10后进行 ...
- 算法题:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串“12345”,则输出整数“12345”
今天这道算法题比较简单,主要考察的思考问题的全面性.这个需要考虑的几种情况. 如果输入的整数字符串是个负数,怎么处理? 如果输入的第一个字符是0,则怎么处理? 如果输入的是非0~9之间的字符怎么处理? ...
最新文章
- Log4j官方文档翻译(一、基本介绍)
- 如何拓展外链引流,让网站成为“顶牛”?
- Catch Overflow!
- 大型项目中会出现的一些问题:
- server 2008R2 AD域环境中DHCP服务器的授权步骤
- php利用引用实现树形数组
- 招商银行王龙:金融科技银行数据架构设计的13条守则(含PPT)
- [ACM] hdu 1285 确定比赛 (拓扑排序)
- java容器分数0-9_2018.4.27 java容器
- shell学习之突发奇想 ^_^ 打印9*9乘法表
- 网页上的html表格导出excel表格,网页表格导出至Excel
- Glide 加载圆形图片
- 优锘科技:渲染引擎T3D:WebGL端数字孪生应用最优解
- 【铁矿石期货怎么开通】11月22日午盘基本面资讯整理
- 开发必备的最高100个 Flutter 开源精品项目
- Linux 小程序开发日记(终章)(pyqt+yolov5)
- 【生成模型】浅析玻尔兹曼机的原理和实践
- 浅析产品新手引导设计
- 阈值法matlab程序,遗传算法优化BP神经网络权值和阈值的通用MATLAB源码
- C#面向对象Chatbot智能版