当前位置 博文首页 > Yawn:Leetcode——字符串转换整数 (atoi)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:
注意:
错误一:
一开始没注意看题,以为需要把所有数字提取出来。。
数组越界啦~~~~
class Solution {
public int myAtoi(String s) {
int flag = 1, total = 0;
char[] str = s.toCharArray();
for(int i = 0; i < s.length(); i++){
while(i < s.length() && !Character.isDigit(str[i])){
if(str[i] == '-')
flag = -1;
i++;
}
if(str[i] == '-')
flag = -1;
int temp = total;
total = temp*10 + (str[i] - '0');
if((total - (str[i] - '0')) / 10 != temp){
return (flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE);
}
}
return flag * total;
}
}
仔细看看是没有排除特殊情况导致:排除极端情况 " " 和""
if(index >= s.length()) //重点,一定要判断index >= s.length()的情况,排除极端情况 " " 和""
return 0;
解法:
class Solution {
public int myAtoi(String s) {
char[] str = s.toCharArray();
int flag = 1, index = 0, total = 0;
while(index < s.length() && str[index] == ' '){ //去除空格
index++;
}
if(index >= s.length()) //重点,一定要判断index >= s.length()的情况,排除极端情况 " " 和""
return 0;
if(str[index] == '-' || str[index] == '+'){ //确定正负
if(str[index] == '-'){
flag = -1;
}
index++;
}
while(index < s.length()){
if(!Character.isDigit(str[index]))
break; //不是数字直接退出循环
int temp = total;
total = total * 10 + (str[index] - '0');
if(total / 10 != temp){
return (flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE);
}
index++;
}
return flag * total;
}
}
cs