字符串转换函数(atoi)(Leetcode)
Problem: 8. 字符串转换整数 (atoi)
思路
先处理掉字符串前部分的空格,然后遍历并且处理字符串,使用布尔类型变量记录字符串的正负号,在处理过程中,将字符串的字符进行叠加,最后得出结果。
解题方法
预处理->记录正负号->处理字符串->叠加数字->得出结论
复杂度
- 时间复杂度:
本题中,我只是遍历了一遍字符串,因此时间复杂度为
- 空间复杂度:
本题中,我没有申请其他空间,只是在字符串本身上进行处理 ,因此空间复杂度为
Code
class Solution {
public:
int myAtoi(string s) {
if(s.size()==0) return 0;
long long ans=0;
bool flag=false;
int index=0;
while(s[index]==' ')//处理掉字符串前部的空格
{
++index;
}
for(int i=index;i<s.size();++i)//遍历
{
if(!flag&&isdigit(s[i])!=0&&ans>(INT_MAX-(s[i]-'0'))/10)//判断是否大于最大值
{
return INT_MAX;
}
if(flag&&isdigit(s[i])!=0&&ans>(INT_MAX-(s[i]-'0'))/10)//反着用最大值判断判断是否小于最小值
{
return INT_MIN;
}
if(isdigit(s[i])!=0)//判断是否是数字
{
int digit=s[i]-'0';
ans=ans*10+digit;//叠加
}
else if(s[i]=='-'&&i==index)//记录负号
{
flag=true;
continue;
}
else if(s[i]=='+'&&i==index)
{
continue;
}
else
{
break;
}
}
return flag?-ans:ans;
}
};
Leetcode刷题整合 文章被收录于专栏
都是作者刷到的一些感觉是好题整理到一起的,辛苦整理不易,麻烦给个赞,有疑问请留言