トピック:
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;
};