1. 程式人生 > >leetcode 字符串轉整數(atoi)

leetcode 字符串轉整數(atoi)

fun strong 進行 有效 and 返回 etc 我們 ring

實現atoi,將字符串轉為整數。

在找到第一個非空字符之前,需要移除掉字符串中的空格字符。如果第一個非空字符是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字符即為整數的值。如果第一個非空字符是數字,則直接將其與之後連續的數字字符組合起來,形成整數。

字符串可以在形成整數的字符後面包括多余的字符,這些字符可以被忽略,它們對於函數沒有影響。

當字符串中的第一個非空字符序列不是個有效的整數;或字符串為空;或字符串僅包含空白字符時,則不進行轉換。

若函數不能執行有效的轉換,返回 0。

說明:

假設我們的環境只能存儲 32 位有符號整數,其數值範圍是 [?231, 231 ? 1]。如果數值超過可表示的範圍,則返回 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) 。

/**
 * @param {string} str
 * @return {number}
 */
var myAtoi = function (str) {
    const MAX = 2 ** 31 - 1;
    const MIN = (-2) ** 31;
    let num = parseInt(str.trimLeft());
    if (num > MAX) {
        return MAX;
    } else if (num<MIN) {
        return MIN;
    } else if (isNaN(num)) {
        return 0;
    }
    return num;
};

根據題意,先清除左邊空格,我不知道怎麽自己清,只能用trimLeft()方法清除了
因為parseInt轉換會在遇見非數字後舍棄後面的字符,所以又剛好了
所以不用這兩個方法我就寫不來了orz

leetcode 字符串轉整數(atoi)