题目链接:String to Integer (atoi)
这道题目的关键的地方是要考虑到很多中不同的情况。
1、去除字符串前的空格;
2、除空格以外的第一个字符需要是+/-或者有效的数字0-9,;
3、如果第一个字符为+/-,其后紧接着的必须为有效数字直到遇到非数字即可;
4、如果第一个字符不为运算符或者紧接着运算符的不是有效的数字,则转换无效,返回0;
5、如果第一个字符为“-”,则需要将转换后的正数转为负数;
6、要考虑转换后的数值范围,如果正确值超出了可表示值的范围,则返回INT_MAX(2147483647)或INT_MIN(-2147483648);
代码如下:
class Solution {
public int myAtoi(String str) {
int i = 0;
if(str.length()==0)
return 0;
str = str.trim(); \\去掉字符串头尾的空格
double re = 0;
int flag = 0;
//首先判断第一个非空字符是否为“+/-”
if(str.charAt(0)=='+')
i++;
if(str.charAt(0)=='-'){
flag = 1;
i++;
}
//循环遍历,并将其转换为对应的数值,知道遇到第一个非数字字符或者超过字符串的范围
while(i<str.length()&&str.charAt(i)>='0'&&str.charAt(i)<='9'){
int tmp = str.charAt(i) - '0';
re = re*10 + tmp;
i++;
}
//如果运算符号为“-”,则取反
if (flag == 1)
re = -re;
//判断数值的范围是否超过int类型
if (re > Integer.MAX_VALUE)
return Integer.MAX_VALUE;
if (re < Integer.MIN_VALUE)
return Integer.MIN_VALUE;
return (int) re;
}
}