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