LintCode-54. 转换字符串到整数

2019-05-31 10:24:43 浏览数 (1)

题目

描述

实现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));
        }
    }
}

0 人点赞