题目描述:给定一个字符串,要求把这个字符串里,前N位是数字的字符转换成int类型并返回(第N+1位就不是数字)。
有一下几个边界条件。
1 字符串前面如果存在空字符,直接跳过,往下处理。
2 第一个字符如果是+号和-号,可以表示正负数,需要特殊处理下。
3 从第一个字符开始读取,如果当前字符是数字,继续判断下一个字符,如果当前字符不是数字,那么字符串剩下的部分跳过。
4 把是数字部分的子串转成int类型。
5 注意int类型是有取值范围的[-2^31次方, 2^31 - 1]。
那么我们按照这些条件,处理字符串就可以了。
解法:
class Solution {
public int myAtoi(String s) {
//去掉字符前后空格
s=s.trim();
if(s.length()==0){
return 0;
}
int result=0;
int k=0;
boolean flag=true;
//判断下当前字符串的第一位是否需要特殊处理
if(s.charAt(0)=='-' || s.charAt(0)=='+'){
k=1;
flag = s.charAt(0)!='-';
}
int length=0;
//遍历字符串
for(int i=k;i<s.length();i++){
//如果当前字符不是数字,结束循环
if(!Character.isDigit(s.charAt(i))){
break;
}
//如果当前字符是数字,长度加1
length++;
}
if(length == 0) return result;
try{
//截取字符串,转成int类型
result=Integer.parseInt(s.substring(0,length+k));
return result;
}catch(NumberFormatException e){
//如果转换异常 说明超出int值得边界 处理下返回值
return flag ? Integer.MAX_VALUE:Integer.MIN_VALUE;
}
}
}
运行结果: Runtime: 2 ms, faster than 82.30% of Java online submissions for String to Integer (atoi).
Memory Usage: 42.1 MB, less than 15.04% of Java online submissions for String to Integer (atoi).