廣州網(wǎng)站建設o2o搜索引擎查詢
一、題目描述
????????請你來實現(xiàn)一個?myAtoi(string s)?函數(shù),使其能將字符串轉換成一個 32 位有符號整數(shù)
算法如下:??
讀入字符串并丟棄無用的前導空格
檢查下一個字符(假設還未到字符末尾)為正還是負號,讀取該字符(如果有)。 確定最終結果是負數(shù)還是正數(shù)。 如果兩者都不存在,則假定結果為正。
讀入下一個字符,直到到達下一個非數(shù)字字符或到達輸入的結尾。字符串的其余部分將被忽略。
將前面步驟讀入的這些數(shù)字轉換為整數(shù)(即,"123" -> 123, "0032" -> 32)。如果沒有讀入數(shù)字,則整數(shù)為 0 。必要時更改符號(從步驟 2 開始)。
如果整數(shù)數(shù)超過 32 位有符號整數(shù)范圍 [?231,? 231?? 1] ,需要截斷這個整數(shù),使其保持在這個范圍內。具體來說,小于 ?231 的整數(shù)應該被固定為 ?231 ,大于 231?? 1 的整數(shù)應該被固定為 231?? 1 。
返回整數(shù)作為最終結果。
實例:
輸入:s = " ? -42"
輸出:-42
解釋:
第 1 步:" ? -42"(讀入前導空格,但忽視掉)
? ? ? ? ? ? ^
第 2 步:" ? -42"(讀入 '-' 字符,所以結果應該是負數(shù))
? ? ? ? ? ? ?^
第 3 步:" ? -42"(讀入 "42")
? ? ? ? ? ? ? ?^
解析得到整數(shù) -42 。
由于 "-42" 在范圍 [-231, 231 - 1] 內,最終結果為 -42 。
二、思路
? ? ? ? 簡單來說就是要匹配字符串中的數(shù)字(有的帶符號),根據(jù)上述的實例,我們可以先將前導空格去除,這里可以用trim()方法實現(xiàn),然后用match()方法,建立合適的正則匹配規(guī)則,匹配出答案,最后判斷該整數(shù)是否越界,根據(jù)規(guī)則進行輸出返回即可
該題正則匹配規(guī)則:
1. 在上述實例中整數(shù)以(+或-)開頭,如果是+號,可能會不出現(xiàn),所以符號部分的正則匹配是/^[ - | + ]{ 0, 1 }/
2. 該整數(shù)數(shù)字部分,可以是多位數(shù)字,所以它的正則匹配是/ [ 0-9 ]+?/
綜上所述,兩者合在一起便是/ ^[ -|+ ]{ 0, 1 }[ 0-9 ]+/
三、代碼展示?
var myAtoi = function(str) {//利用正則匹配let s = str.trim().match(/^[-|+]{0,1}[0-9]+/)// 范圍判斷if(s !== null) {if(s[0] > Math.pow(2, 31)-1) {return Math.pow(2, 31) - 1} else if (s[0] < Math.pow(-2, 31)) {return Math.pow(-2, 31)}return s[0]}return 0;
};
四、知識回顧
1、關于正則表達式的概念
表達式 | 描述 |
---|---|
[0-9] | 查找任何從 0 至 9 的數(shù)字。 |
(1|2|3|4) | 查找任何指定的選項。 |
量詞 | 描述 |
---|---|
n+ | 匹配任何包含至少一個 n 的字符串。 |
?2、關于js String對象的match方法
方法 | 描述 |
---|---|
match() | 查找找到一個或多個正則表達式的匹配 |
?
?注意:match()方法返回的值是一個數(shù)組,也就是說,他會自動匹配左右符合條件的元素,組成一個數(shù)組