LeetCode 8.字符串转换整数
Posted 阿乐246
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 8.字符串转换整数相关的知识,希望对你有一定的参考价值。
一、题目详情
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:
- 读入字符串并丢弃无用的前导空格
- 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
- 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
- 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
- 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
- 返回整数作为最终结果。
注意:
- 本题中的空白字符只包括空格字符 ’ ’ 。
- 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
示例:
输入:s = “42”
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:“42”(当前没有读入字符,因为没有前导空格)
^
第 2 步:“42”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
^
第 3 步:“42”(读入 “42”)
^
解析得到整数 42 。
由于 “42” 在范围 [-231, 231 - 1] 内,最终结果为 42 。
二、思路
其实题目中函数的算法已经描述得很详细,我们只要根据算法一步步来,就可以了。
想将字符串转换为整数,我们首先得获取这个整数的最高位在字符串中的位置,然后不断读入数字,直到下一个非数字或者字符串读完为止。
三、代码
class Solution {
public int myAtoi(String str) {
char[] charArr=str.toCharArray();
Long result=0L;
int startIndex=0;
boolean flag=true;
int length=0;//整数的长度
//获取最高位数字在字符串中的索引位置
for(int i=0;i<charArr.length;i++) {
if(charArr[i]==' ') {
startIndex++;
continue;
}
if(charArr[i]=='+') {
flag=true;
startIndex++;
break;
}
if(charArr[i]=='-') {
flag=false;
startIndex++;
break;
}
break;
}
//把最高位的零都去掉
while(startIndex<charArr.length) {
if(charArr[startIndex]=='0')
startIndex++;
else
break;
}
//不断地读入数字
for(int j=startIndex;j<charArr.length;j++) {
if(charArr[j]>='0'&&charArr[j]<='9') {
length++;
result=result*10+(charArr[j]-'0');//这段数字的值
if(length>10) {//32位int的最大值是10位数
break;
}
}else {
break;
}
}
if(flag) {
if(result>Integer.MAX_VALUE){
return Integer.MAX_VALUE;
}
}else {
result=-result;
if(result<Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
}
return result.intValue();
}
}
以上是关于LeetCode 8.字符串转换整数的主要内容,如果未能解决你的问题,请参考以下文章
⭐算法入门⭐《模拟》中等01 —— LeetCode 8. 字符串转换整数