8. 字符串轉(zhuǎn)換整數(shù) (atoi)
請你來實(shí)現(xiàn)一個(gè) myAtoi(string s) 函數(shù),使其能將字符串轉(zhuǎn)換成一個(gè) 32 位有符號(hào)整數(shù)(類似 C/C++ 中的 atoi 函數(shù))斤富。
函數(shù) myAtoi(string s) 的算法如下:
讀入字符串并丟棄無用的前導(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)。如果沒有讀入數(shù)字掂僵,則整數(shù)為 0 航厚。必要時(shí)更改符號(hào)(從步驟 2 開始)。
如果整數(shù)數(shù)超過 32 位有符號(hào)整數(shù)范圍 [?231, 231 ? 1] 锰蓬,需要截?cái)噙@個(gè)整數(shù)幔睬,使其保持在這個(gè)范圍內(nèi)。具體來說芹扭,小于 ?231 的整數(shù)應(yīng)該被固定為 ?231 麻顶,大于 231 ? 1 的整數(shù)應(yīng)該被固定為 231 ? 1 。
返回整數(shù)作為最終結(jié)果舱卡。
注意:
本題中的空白字符只包括空格字符 ' ' 辅肾。
除前導(dǎo)空格或數(shù)字后的其余字符串外,請勿忽略 任何其他字符灼狰。
示例 1:
輸入:s = "42"
輸出:42
解釋:加粗的字符串為已經(jīng)讀入的字符宛瞄,插入符號(hào)是當(dāng)前讀取的字符。
第 1 步:"42"(當(dāng)前沒有讀入字符交胚,因?yàn)闆]有前導(dǎo)空格)
^
第 2 步:"42"(當(dāng)前沒有讀入字符份汗,因?yàn)檫@里不存在 '-' 或者 '+')
^
第 3 步:"42"(讀入 "42")
^
解析得到整數(shù) 42 。
由于 "42" 在范圍 [-231, 231 - 1] 內(nèi)蝴簇,最終結(jié)果為 42 杯活。
題目太長,貼出鏈接
https://leetcode-cn.com/problems/string-to-integer-atoi/
// 利用api parseInt(官方自動(dòng)機(jī)我無能熬词,我反思)
var myAtoi = function(s) {
let num = parseInt(s,10)
if(isNaN(num)){
return 0
}else if(num<Math.pow(-2,31)||num>Math.pow(2,31)-1){
return num<Math.pow(-2,31)?Math.pow(-2,31):Math.pow(2,31)-1
}else{
return num
}
};
實(shí)現(xiàn) strStr()
實(shí)現(xiàn) strStr() 函數(shù)旁钧。
給你兩個(gè)字符串 haystack 和 needle 吸重,請你在 haystack 字符串中找出 needle 字符串出現(xiàn)的第一個(gè)位置(下標(biāo)從 0 開始)。如果不存在歪今,則返回 -1 嚎幸。
說明:
當(dāng) needle 是空字符串時(shí),我們應(yīng)當(dāng)返回什么值呢寄猩?這是一個(gè)在面試中很好的問題嫉晶。
對于本題而言,當(dāng) needle 是空字符串時(shí)我們應(yīng)當(dāng)返回 0 田篇。這與 C 語言的 strstr() 以及 Java 的 indexOf() 定義相符替废。
示例 1:
輸入:haystack = "hello", needle = "ll"
輸出:2
var strStr = function(haystack, needle) {
if(needle=='') return 0
return haystack.indexOf(needle)
};
給定一個(gè)正整數(shù) n ,輸出外觀數(shù)列的第 n 項(xiàng)泊柬。
「外觀數(shù)列」是一個(gè)整數(shù)序列椎镣,從數(shù)字 1 開始,序列中的每一項(xiàng)都是對前一項(xiàng)的描述兽赁。
你可以將其視作是由遞歸公式定義的數(shù)字字符串序列:
countAndSay(1) = "1"
countAndSay(n) 是對 countAndSay(n-1) 的描述状答,然后轉(zhuǎn)換成另一個(gè)數(shù)字字符串。
前五項(xiàng)如下:
- 1
- 11
- 21
- 1211
- 111221
第一項(xiàng)是數(shù)字 1
描述前一項(xiàng)刀崖,這個(gè)數(shù)是 1 即 “ 一 個(gè) 1 ”剪况,記作 "11"
描述前一項(xiàng),這個(gè)數(shù)是 11 即 “ 二 個(gè) 1 ” 蒲跨,記作 "21"
描述前一項(xiàng),這個(gè)數(shù)是 21 即 “ 一 個(gè) 2 + 一 個(gè) 1 ” 授翻,記作 "1211"
描述前一項(xiàng)或悲,這個(gè)數(shù)是 1211 即 “ 一 個(gè) 1 + 一 個(gè) 2 + 二 個(gè) 1 ” ,記作 "111221"
要 描述 一個(gè)數(shù)字字符串堪唐,首先要將字符串分割為 最小 數(shù)量的組巡语,每個(gè)組都由連續(xù)的最多 相同字符 組成。然后對于每個(gè)組淮菠,先描述字符的數(shù)量男公,然后描述字符,形成一個(gè)描述組合陵。要將描述轉(zhuǎn)換為數(shù)字字符串枢赔,先將每組中的字符數(shù)量用數(shù)字替換,再將所有描述組連接起來拥知。
示例 1:
輸入:n = 1
輸出:"1"
解釋:這是一個(gè)基本樣例踏拜。
示例 2:
輸入:n = 4
輸出:"1211"
解釋:
countAndSay(1) = "1"
countAndSay(2) = 讀 "1" = 一 個(gè) 1 = "11"
countAndSay(3) = 讀 "11" = 二 個(gè) 1 = "21"
countAndSay(4) = 讀 "21" = 一 個(gè) 2 + 一 個(gè) 1 = "12" + "11" = "1211"
提示:
1 <= n <= 30
// 這題我做過,這題我又不行了低剔,發(fā)現(xiàn)之前用的正則做的速梗,看不懂了肮塞。也沒思路,看了大神的解題
// 這種方式對我來說更好理解
// 雙指針+遞歸
var countAndSay = function (n) {
if(n === 1) return "1"
let item = countAndSay(n - 1);
let res = '',left = 0,right = 0
console.log(item.length)
while(right<item.length){
while(item[left] === item[right] && right < item.length){
right++;
}
res += (right-left).toString() + item[left]
left = right
}
console.log(res)
return res
};
最長公共前綴
編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴姻锁。
如果不存在公共前綴枕赵,返回空字符串 ""。
示例 1:
輸入:strs = ["flower","flow","flight"]
輸出:"fl"
示例 2:
輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共前綴位隶。
// 如果strs只有一個(gè)元素則輸出第一個(gè)元素即可 strs[0]
// 否則拿第一個(gè)數(shù)組元素字符串長度作為遍歷長度條件
// 然后遍歷數(shù)組
var longestCommonPrefix = function(strs) {
let p=0,res = ''
if(strs.length==1){
return strs[0]
}
//p指針以數(shù)組第一個(gè)元素長度范圍內(nèi)拷窜,有條件的話選數(shù)組中元素最短的長度更好
while(p<strs[0].length){
for(let j=0;j<strs.length-1;j++){
//如果相鄰元素的相同位置不等時(shí),則不再是公共前綴元素钓试,直接輸出
if(strs[j][p]!=strs[j+1][p]){
console.log(res)
return res
}
//不同元素的相同位置都一樣時(shí)装黑,一輪遍歷結(jié)束,將這個(gè)位置的字母放入到公共前綴中
if(j == strs.length-2){
res+=strs[j][p]
p++
}
}
}
console.log(res)
return res
};
strs = ["flower","flow","flight"]
longestCommonPrefix(strs)