一、题目:8. 字符串转换整数 (atoi)
二、题目解析:
按照题目一步一步来:
1. 处理字符串前导空格
2. 记录字符串第一个非空格起始下标start
3. 遍历剩余字符串
3.1 如果当前下标等于start 并且当前字符等于字符+,则记录符号位sign
3.2 如果当前下标等于start 并且当前字符等于字符-, 则记录符号位sign
3.3 如果当前字符是数字,提前处理边界条件
3.4 将数字进行拼接
3.5 3.1-3.4 条件都不符合则跳过当前字符
三、代码如下:
public int myAtoi(String s) {
//保存结果
int res = 0;
//处理正负号
int sign = 1;
//获取s长度
int m = s.length();
int i = 0;
//处理前导空格
while(i<m && s.charAt(i) == ' '){
i++;
}
//记录s第一个非空格起始下标
int start = i;
while(i<m){
char c = s.charAt(i);
if(i == start && s.charAt(i)=='+'){
sign = 1;
}else if(i == start && s.charAt(i)=='-'){
sign = -1;
}else if(Character.isDigit(c)){
//将字符型的数字转换为整型的数字
int num = c-'0';
//处理边界 提前判断 如果res>int的前9位第十位这次就没必要累加了 或者 在第9位相等的情况下最后一位越界
if(res>Integer.MAX_VALUE/10 || (res==Integer.MAX_VALUE/10 && num>Integer.MAX_VALUE/10)){
return Integer.MAX_VALUE;
}
//负数同理
if(res<Integer.MIN_VALUE/10 || (res==Integer.MAX_VALUE/10 && -num<Integer.MAX_VALUE/10)){
return Integer.MIN_VALUE;
}
res = res*10+sign*num;
}else{
break;
}
i++;
}
return res;
}
四、测试:
五、结束