【LeetCode刷题日记---字符串转换整数(atoi)】

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题解

此题有两个关键点,一个是对字符串的处理,一个是对溢出情况的判断。

  • 字符串处理:

这里输入进来的字符串前端和后端什么字符都可能出现,故用一个while循环,先找到第一个数字s[i],再判断前面s[i-1] 是不是 ‘-’, 后面就一直找直到出现不为数字的字符为止。

  • 溢出情况的判断:通常应该是这样:判断是否 ans * 10 + temp > Integer.MAX_VALUE ,但可能会出现 ans*10+temp 溢出的情况,所以不妨把不等式移动一下,ans > (Integer.MAX_VALUE - digit) / 10

代码如下:

int myAtoi(char * s){
	int temp=0;
	int ans=0;
	int i=0,flg=1;
	while((s[i]<'0'||s[i]>'9')&&s[i]!='\0')
	{
		i++;
	}
	if(i==strlen(s)-1)return 0;
	if(s[i-1]=='-')
	{
		flg=-1;
	}
	//printf("flg:%d\n",flg);
	while(s[i]>='0'&&s[i]<='9'&&s[i]!='\0')
	{
		temp=s[i]-'0';
		if(ans > (2147483647 - temp) / 10)
		{
			if(flg>0)return 2147483647;
			else return -2147483648;
		}
		ans*=10;
		ans+=temp;
		i++;
	}
	ans=ans*flg;
	return ans;
}

此题亮点是对溢出情况的判断,用变换不等式的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值