题目
描述
实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。
样例
"10" =>10 "-1" => -1 "123123123123123" => 2147483647 "1.0" => 1
解答
思路
略
代码
代码语言:javascript复制public class Solution {
/**
* @param str: A string
* @return: An integer
*/
public int atoi(String str) {
// write your code here
String ss = null;
StringBuffer sb = new StringBuffer();
// 如果有小数点,截取到小数点并去除空格
if (str.contains(".")){
ss = str.substring(0, str.indexOf(".")).trim();
}
else {
ss = str.trim();
}
try{
if("".equals(ss)){
return 0;
}
else return Integer.parseInt(ss);
}
catch(NumberFormatException ne){
/*
* 判断前缀, ,-,其他
*/
// 前面是
if(ss.charAt(0) == ' '){
getNums(1, ss, sb);
if(sb.length() == 0) return 0;
else if(sb.length() < ss.length()) return atoi(sb.toString());
else return Integer.MAX_VALUE;
}
else if (ss.charAt(0) == '-'){
sb.append('-');
getNums(1, ss, sb);
if(sb.length() == 1) return 0;
else if(sb.length() < ss.length()) return atoi(sb.toString());
else return Integer.MIN_VALUE;
}
else{
getNums(0, ss, sb);
if(sb.length() == 0) return 0;
else if(sb.length() < ss.length()) return atoi(sb.toString());
else return Integer.MAX_VALUE;
}
}
}
public void getNums(int start, String str, StringBuffer sb){
for (int i = start; i < str.length(); i ){
if(str.charAt(i) < '0' || str.charAt(i) > '9'){
break;
}
sb.append(string.charAt(i));
}
}
}