(Js)Leetcode 8.文字列変換整数(atoi)

トピック:

myAtoi(string s)関数を実装して、文字列を32ビットの符号付き整数に変換してください(C / C ++のatoi関数と同様)。

関数myAtoi(string s)のアルゴリズムは次のとおりです。

文字列を読み込み、不要な先頭のスペースを破棄します。
最初の文字(文字の終わりに達していないことを前提とします)が正か負かを確認し、文字(ある場合)を読み取ります。最終結果が負か正かを判断します。どちらも存在しない場合、結果は正であると見なされます。
次の数字以外の文字に到達するか、入力の終わりに到達するまで、次の文字を読み込みます。文字列の残りの部分は無視されます。
前の手順で読み取った数値を整数に変換します(つまり、「123」-> 123、「0032」-> 32)。数値が読み取られない場合、整数は0です。必要に応じて記号を変更します(手順2から)。
整数が32ビットの符号付き整数の範囲[-231、231 -1]を超える場合、整数をこの範囲内に保つために切り捨てる必要があります。具体的には、-231より小さい整数は-231に固定し、231-1より大きい整数は231-1に固定する必要があります。
最終結果として整数を返します。
注意:

この質問の空白文字には、スペース文字 ''のみが含まれます。
先頭のスペースまたは数字の後の文字列の残りの部分を除いて、他の文字を無視しないでください。

アイデア:

1.最初にスペースを削除します

2.空、0を返す

3.最初の文字が記号または数字の場合は続行し、それ以外の場合は0を返します。

    1)文字列をトラバースして、数字ではない最初の文字の位置を見つけます

    2)デジタル部分の文字列を傍受する

4.デジタル部分の上限と下限を決定し、制限を超えた場合は対応する制限値を返します

コード:

/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function(s) {
    s = s.trim();
    if(!s) return 0;
    // 第一个字符是正负号,或者是数字
    if(['+','-'].includes(s[0]) || !isNaN(+s[0])) {
        for(let i = 1; i < s.length; i++) {
            // 找到某个数不是数字
            if(isNaN(+s[i]) || s[i] == ' ') {
                s = +s.substr(0, i);
            }
        }
        const max = Math.pow(2, 31) - 1;
        const min = Math.pow(-2, 31);
        +s < min && (s = min);
        +s > max && (s = max);
        return isNaN(+s) ? 0 : +s;
    }
    return 0;
};

演算結果:

おすすめ

転載: blog.csdn.net/M_Eve/article/details/113622079