【leetcode】String to Integer (atoi)

<p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 30px;">implement <span style="box-sizing: border-box; font-family: monospace;">atoi</span> to convert a string to an integer.</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 30px;"><span style="box-sizing: border-box; font-weight: 700;">Hint:</span> Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 30px;"><span style="box-sizing: border-box; font-weight: 700;">Notes:</span> It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.</p>

<p>分析:需要考虑多种情况:</p><p><span style="white-space: pre;">	</span>1、开头有空格,跳过,直到遇到+、-或者数字</p><p><span style="white-space: pre;">	</span>2、第一位为正负号的,决定最终数值的正负</p><p><span style="white-space: pre;">	</span>3、从第二位开始,如果遇到非数字,跳出。</p><p><span style="white-space: pre;">	</span>4、遇到数字,直接转换</p><span style="white-space:pre">	</span>5、溢出问题
class Solution {
public:
    int myAtoi(string str) {
   int i=0;
	int result=0;
	while(str[i]==' ')
		i++;
	int sign=1;
	if (str[i]=='-')
	{
		sign=-1;i++;
	}
	else if (str[i]=='+')
	{
		sign=1;i++;
	}
	while (i<str.length())
	{
		if (str[i]<'0'||str[i]>'9')
		{
			break;
		}
		else
		{
			int pre_result=result;
			result=result*10+str[i]-'0';
			i++;
			if(result/10!=pre_result)
				return sign==1?INT_MAX:-INT_MIN;
	
		}	
	}
	return sign==1?result:-result;
    }
};


遇到的问题:

1、数字转换时,注意 result=result*10+str[i]-'0'; 这种方法稍微简单一点。

2、如果溢出,则该次的计算会出现跳变,通过检测新结果除以10的商与上一次的结果是不是相等,来判断是否出现了溢出。

分析:需要考虑多种情况:

1、开头有空格,跳过,直到遇到+、-或者数字

2、第一位为正负号的,决定最终数值的正负

3、从第二位开始,如果遇到非数字,跳出。

4、遇到数字,直接转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值