LeetCode(8):字符串转整数(atoi)
Medium!
题目描述:
实现 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) 。
解题思路:
字符串转为整数是很常用的一个函数,由于输入的是字符串,所以需要考虑的情况有很多种。关于验证一个字符串是否为数字,请参见博客:http://www.cnblogs.com/grandyang/p/4084408.html,该博客详细的讨论了各种情况,包括符号,自然数,小数点的出现位置,判断他们是否是数字。那么这道题也应该有这么多种情况。但是这题只需要考虑数字和符号的情况:
1. 若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0.
2. 若第一个非空格字符是符号+/-,则标记sign的真假,这道题还有个局限性,那就是在c++里面,+-1和-+1都是认可的,都是-1,而在此题里,则会返回0.
3. 若下一个字符不是数字,则返回0. 完全不考虑小数点和自然数的情况,不过这样也好,起码省事了不少。
4. 如果下一个字符是数字,则转为整形存下来,若接下来再有非数字出现,则返回目前的结果。
5. 还需要考虑边界问题,如果超过了整形数的范围,则用边界值替代当前值。
C++参考答案:
class Solution {
public:
int myAtoi(string str) {
if (str.empty()) return ;
int sign = , base = , i = , n = str.size();
while (i < n && str[i] == ' ') ++i;
if (str[i] == '+' || str[i] == '-') {
sign = (str[i++] == '+') ? : -;
}
while (i < n && str[i] >= '' && str[i] <= '') {
if (base > INT_MAX / || (base == INT_MAX / && str[i] - '' > )) {
return (sign == ) ? INT_MAX : INT_MIN;
}
base = * base + (str[i++] - '');
}
return base * sign;
}
};
参考资料:
https://discuss.leetcode.com/topic/2666/my-simple-solution
https://discuss.leetcode.com/topic/15891/8ms-c-solution-easy-to-understand
LeetCode(8):字符串转整数(atoi)的更多相关文章
- 前端与算法 leetcode 8. 字符串转换整数 (atoi)
目录 # 前端与算法 leetcode 8. 字符串转换整数 (atoi) 题目描述 概要 提示 解析 解法一:正则 解法二:api 解法二:手搓一个api 算法 传入测试用例的运行结果 执行结果 G ...
- LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))
8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...
- [LeetCode] 8. 字符串转换整数 (atoi)
题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- 每日一题LeetCode 8. 字符串转换整数 (atoi)
问题描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将 ...
- LeetCode 8.字符串转换整数 (atoi)(Python3)
题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...
- Java实现 LeetCode 8 字符串转换整数(atoi)
8. 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
- LeetCode Golang 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...
- 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)
字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...
- LeetCode8. 字符串转整数 (atoi)
8. 字符串转整数 (atoi) 描述 实现 atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连 ...
- 17、字符串转换整数 (atoi)
17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
随机推荐
- Prometheus Node_exporter
Node Exporter node_exporter 主要用于 *NIX 系统监控, 用 Golang 编写. 功能对照表 默认开启的功能 名称 说明 系统 arp 从 /proc/net/arp ...
- MySQL_select语句(不定时更新)
1.SELECT语句 select if(fraction>=60 and fraction<=100,'合格','不合格') from sp_employeezzvalidate;
- Hbase记录-HBase扫描/计数/权限
HBase扫描 scan 命令用于查看HTable数据.使用 scan 命令可以得到表中的数据.它的语法如下: scan ‘<table name>’ 下面的示例演示了如何使用scan ...
- spring tool suite处理 maven项目名称红色感叹号的问题
今天构建一个springboot项目时,发现项目有个红色感叹号,但是pom.xml跟Build Path 都没问题. 解决方案: 选择 Windows --> show view --> ...
- Neural Networks and Deep Learning 课程笔记(第四周)深层神经网络(Deep Neural Networks)
1. 深层神经网络(Deep L-layer neural network ) 2. 前向传播和反向传播(Forward and backward propagation) 3. 总结 4. 深层网络 ...
- Linux安装mysql过程(转+完善)
http://blog.csdn.net/jerome_s/article/details/52883234yum 安装MySQL 1. 检查安装情况 查看有没有安装过: ...
- 表格重新加载 where 携带上次值问题
表格重载两种方式: 方式一: tableIns.reload(options) 注意这种方式的重载是不会携带上次数据加载时的where值 //使用 第一次渲染返回的对象 var table ...
- MSVCR120.dll丢失问题
一.问题:丢失MSVCR120.dll 二.解决方法 到官网下载vcredist_x86.exe安装即可 地址:https://www.microsoft.com/en-us/download/det ...
- android 加载图片
package mydemo.mycom.demo2; import android.graphics.Bitmap; import android.graphics.BitmapFactory; i ...
- Listbox的操作,数据源变化时要及时更新listbox要先把数据源置空,在给数据源绑定数据
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...