天天看點

(四)字元串轉換整數 (atoi)題目描述:

題目描述:

請你來實作一個 atoi 函數,使其能将字元串轉換成整數。

首先,該函數會根據需要丢棄無用的開頭空格字元,直到尋找到第一個非空格的字元為止。接下來的轉化規則如下:

如果第一個非空字元為正或者負号時,則将該符号與之後面盡可能多的連續數字字元組合起來,形成一個有符号整數。

假如第一個非空字元是數字,則直接将其與之後連續的數字字元組合起來,形成一個整數。

該字元串在有效的整數部分之後也可能會存在多餘的字元,那麼這些字元可以被忽略,它們對函數不應該造成影響。

注意:假如該字元串中的第一個非空格字元不是一個有效整數字元、字元串為空或字元串僅包含空白字元時,則你的函數不需要進行轉換,即無法進行有效轉換。

在任何情況下,若函數不能進行有效的轉換時,請傳回 0 。

提示:

本題中的空白字元隻包括空格字元 ' ' 。

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

示例 1:

(四)字元串轉換整數 (atoi)題目描述:

示例 2:

(四)字元串轉換整數 (atoi)題目描述:

示例 3:

(四)字元串轉換整數 (atoi)題目描述:

示例 4:

(四)字元串轉換整數 (atoi)題目描述:

示例 5:

(四)字元串轉換整數 (atoi)題目描述:
class Solution {
    public int myAtoi(String s) {
        String str = s.trim();
        if(str.length()==0) return 0;
        if(!Character.isDigit(str.charAt(0)) && str.charAt(0) != '+' && str.charAt(0) != '-'){
            return 0;
        }
        //看不懂 這個L????
        long ans = 0L;
        //若首位為減号,則 neg 為真;反之 neg 為負
        boolean neg = str.charAt(0) == '-';
        int i = Character.isDigit(str.charAt(0))? 0:1;
        while(i < str.length() && Character.isDigit(str.charAt(i))){
            ans = ans*10 + (str.charAt(i++)-'0');

            if(!neg && ans > Integer.MAX_VALUE){
                ans = Integer.MAX_VALUE;
                break;
            }
            if(neg && ans > 1L+Integer.MAX_VALUE){
                ans = 1L +Integer.MAX_VALUE;
                break;
            }
        }
        return neg? (int)-ans:(int)ans;
    }
}