LeetCode 8.字符串转换整数

一、题目详情

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:

  • 读入字符串并丢弃无用的前导空格
  • 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  • 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  • 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  • 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
  • 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ’ ’ 。
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例:

输入:s = “42”
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:“42”(当前没有读入字符,因为没有前导空格)
^
第 2 步:“42”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
^
第 3 步:“42”(读入 “42”)
^
解析得到整数 42 。
由于 “42” 在范围 [-231, 231 - 1] 内,最终结果为 42 。

二、思路

其实题目中函数的算法已经描述得很详细,我们只要根据算法一步步来,就可以了。
想将字符串转换为整数,我们首先得获取这个整数的最高位在字符串中的位置,然后不断读入数字,直到下一个非数字或者字符串读完为止。

三、代码
class Solution {
    public int myAtoi(String str) {
        char[] charArr=str.toCharArray();
		Long result=0L;
		int startIndex=0;
		boolean flag=true;
		int length=0;//整数的长度
    	//获取最高位数字在字符串中的索引位置
		for(int i=0;i<charArr.length;i++) {
			if(charArr[i]==' ') {
				startIndex++;
				continue;
			}
			if(charArr[i]=='+') {
				flag=true;
				startIndex++;
				break;
			}
			if(charArr[i]=='-') {
				flag=false;
				startIndex++;
				break;
			}
			break;
		}
		//把最高位的零都去掉
		while(startIndex<charArr.length) {
			if(charArr[startIndex]=='0')
				startIndex++;
			else 
				break;
		}

		//不断地读入数字
		for(int j=startIndex;j<charArr.length;j++) {
			if(charArr[j]>='0'&&charArr[j]<='9') {
				length++;
				result=result*10+(charArr[j]-'0');//这段数字的值
				if(length>10) {//32位int的最大值是10位数
					break;
				}
			}else {
				break;
			}
		}
		if(flag) {
			if(result>Integer.MAX_VALUE){
				return Integer.MAX_VALUE;
			}
		}else {
			result=-result;
			if(result<Integer.MIN_VALUE) {
				return Integer.MIN_VALUE;
			}
		}
		return result.intValue();
	}
}





code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值