leetcode 8. String to Integer (atoi)(string)

8. String to Integer

题目

https://leetcode.cn/problems/string-to-integer-atoi/

关键部分

已在标注中说明。不过我还是想说,其实这个题的思路比较简单,但很多地方由于手生出现了很可惜(高情商)的问题,比如for循环第一个位置并不总是int i=0,一定要具体问题具体分析

题解

class Solution {
public:
    int myAtoi(string s) {
int i=0,flag=1,res=0,len=s.size();
	while(s[i]==' '&&i<len) i++;
	int start=i;//如果中途遇到+和-,直接退出
	for(;i<len;i++){//注意这里不要习惯性地加上int i=0
		if(isdigit(s[i])){
			int t=s[i]-'0';
			if(res>INT_MAX/10||(res==INT_MAX/10&&t>INT_MAX%10)){
				return INT_MAX;
			}
			else if(res<INT_MIN/10||(res==INT_MIN/10&&-t<INT_MIN%10)){//INT_MIN%10也是负数,只有比它小才能超出它
				return INT_MIN;
			}
			res=res*10+flag*t;
		}
		else if(i==start&&s[i]=='-'){
			flag=-1;
		}
		else if(i==start&&s[i]=='+'){
			flag=1;
		}
		else break;
	}
	return res;
    }
};

说明

该博客主要是为了博主自己复习用,选择的题解很多都是借鉴leetcode上大佬的解答且解释性较差。但大家放心,我选择的基本都是精妙且容易理解的answer,晦涩难懂的解答我是不会选的(比如这题,官网给的是有限自动机,就挺离谱的,这不是编译原理的东西吗)。

另外,我选择的语言是c++,已经习惯了,其它语言的解答官网也有,大家自行查看

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值