LeetCode《初級演算法》字串之字串轉換整數 -- JavaScript

語言: CN / TW / HK

題目

題目連結:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnoilh/

image.png

題解


1、按照題意一步一步來

題目已經給了完整的演算法,按照演算法變成就行了,有以下要注意的點: * 超出 32位有符號整數 的範圍時的處理; * '-+89' 或 '+-980' 返回的是 0;

```js /* * @param {string} s * @return {number} / var myAtoi = function(s) {

let index = 0,
    isMinus = false,
    integer = 0;

const max_abs = Math.pow(2,31) - 1,
    min_abs = Math.pow(2,31);


while(s[index] === ' '){
    index++;
}

if(s[index] === '-'){
    index++;
    isMinus = true;
}else if(s[index] === '+'){
    index++;
}


while(s[index] === '0') {
    index++;
}

while(s[index] <= '9' && s[index] >= '0') {

    integer = integer * 10 + Number(s[index]);
    if( integer > max_abs && false === isMinus) {
        return max_abs;
    }
    if( integer > min_abs && true === isMinus) {
        return 0 - min_abs;
    }
    index++;

}

if(integer !== 0 && isMinus) {
    return -integer;
}
return integer;

};

```

2、使用 JS Number物件給的 parseInt 方法

可以使用 JavaScript 的 Number物件給的 parseInt() 方法來進行字串轉整數,但是 parseInt() 的轉換規則和題目規則並不是一摸一樣,所以要對輸出結果進行一定的修改判斷; * parseInt() 對非數值字元的處理輸出是 NaN,而題目要求的不能處理的字串輸出 0; * parseInt() 能轉換 超過32位帶符號整數的數值;

```js /* * @param {string} s * @return {number} / var myAtoi = function(s) {

let n = parseInt(s);
const max = Math.pow(2,31) - 1,
    min = 0 - Math.pow(2,31);

if(n.toString() === 'NaN') {
    return 0;
}else if( n < min) {
    return min;
}else if( n > max ) {
    return max;
}

return n;

}; ```


大家如果有更好的思路和解法,歡迎大家一起來討論啊~

這是使用 JavaScript 對 LeetCode《初級演算法》的每道題的總結和實現的其中一篇,彙總篇在這裡:

https://juejin.cn/post/7006692002125316103