前言:鉴于今年秋招算法工程师找工作之艰辛,感觉平时的代码功底(写题目)不能丢,遂开刷leetcode,先从middlle难度开始吧!争取一周三道,有空再打打codeforce,hihocoder。
思路:
根据题面意思模拟:先处理第一位空格 + - 等情况再转字符为数字,最后判断一下数字范围。这题最大难度是快速阅读英文题面吧。
class Solution {
public:
int myAtoi(string str) {
long long maxx = (1<<31)-1,minn = -(1<<31);
long long ans = 0;
int flag = -1 ,p =0;
while(str[p]==' ') p++;
if(str[p]=='+'){
flag = 0; p++;
}
else if(str[p]=='-'){
flag = 1; p++;
}
for(int i=p;str[i];i++){
if(str[i]>='0'&&str[i]<='9'){
if(flag == 1){
ans = ans *10 - (str[i] -'0');
if(ans <minn){
ans = minn;
break;
}
}
else{
ans = ans *10 + (str[i] -'0');
if(ans >maxx){
ans = maxx;
break;
}
}
}
else break;
}
return ans;
}
};