LeetCode 8 字符串轉成整數(Java)

題目描述:

假設我們的環境只能存儲 32 位大小的有符號整數,那麼其數值範圍爲 [−231,  231 − 1]。如果數值超過這個範圍,qing返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例 1:

輸入: "42"
輸出: 42
示例 2:

輸入: "   -42"
輸出: -42
解釋: 第一個非空白字符爲 '-', 它是一個負號。
     我們儘可能將負號與後面所有連續出現的數字組合起來,最後得到 -42 。
示例 3:

輸入: "4193 with words"
輸出: 4193
解釋: 轉換截止於數字 '3' ,因爲它的下一個字符不爲數字。
示例 4:

輸入: "words and 987"
輸出: 0
解釋: 第一個非空字符是 'w', 但它不是數字或正、負號。
     因此無法執行有效的轉換。
示例 5:

輸入: "-91283472332"
輸出: -2147483648
解釋: 數字 "-91283472332" 超過 32 位有符號整數範圍。 
     因此返回 INT_MIN (−231) 。

解法:

public int myAtoi(String str) {
        long res = 0L;
        int index = 0;
        int sign = 1;
        str = str.trim();
        if(str == null || str.length() == 0)
            return 0;

        if(str.charAt(index) == '-' || str.charAt(index) == '+') {
            if(str.charAt(index) == '-') {
                sign = -1;
            }
            index++;
        }
        for(;index < str.length();index++) {
            if(str.charAt(index) < '0' || str.charAt(index) > '9')
                break;
            res = res*10 + (str.charAt(index)-'0');
            if(res >= Integer.MAX_VALUE)
                break;
        }
        if(res * sign <= Integer.MIN_VALUE)
            return Integer.MIN_VALUE;
        if(res * sign >= Integer.MAX_VALUE)
            return Integer.MAX_VALUE;
        return (int)res*sign;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章