心得001)
LeetCode字符串簡(jiǎn)單題13羅馬數(shù)字轉(zhuǎn)整數(shù)思路根據(jù)ds本題用字典才是最簡(jiǎn)單最快的方法但是由于本人還沒(méi)學(xué)字典的用法所以第一反應(yīng)是用笨拙的逐字循環(huán)讀取根據(jù)已知條件計(jì)算求和。問(wèn)題和方案1.for循環(huán)不熟悉for i in rangestartstopstepstop和step寫(xiě)反了導(dǎo)致所有羅馬數(shù)字只讀取第一個(gè)數(shù)。2.for i in range因?yàn)閮蓚€(gè)羅馬數(shù)字組合在一起可能有特殊的計(jì)算方式所以我原本希望遇到這種特殊情況用一個(gè)elif分支單獨(dú)判斷完成后修改i的值跳過(guò)已經(jīng)被考慮過(guò)的下一個(gè)數(shù)但是由于range方法的特性在實(shí)際執(zhí)行過(guò)程中不管循環(huán)體內(nèi)對(duì)i做了什么操作執(zhí)行下一次循環(huán)的時(shí)候還是執(zhí)行i1操作導(dǎo)致計(jì)算結(jié)果和預(yù)期不同。所以這里我把for循環(huán)改成了while循環(huán) while i lens手動(dòng)操作i的值規(guī)避這個(gè)問(wèn)題。3.如果一定要用for循環(huán)呢我們可以再定義一個(gè)布爾變量用來(lái)標(biāo)記在處理該數(shù)字的時(shí)候下一個(gè)數(shù)字需不需要跳過(guò)例如如果該變量的值為T(mén)RUE則直接continue直接回到for循環(huán)讓for循環(huán)自動(dòng)將i1實(shí)現(xiàn)跳過(guò)。總結(jié)在遍歷的時(shí)候如果需要跳過(guò)元素while循環(huán)遠(yuǎn)比f(wàn)or循環(huán)靈活兩個(gè)循環(huán)的時(shí)間復(fù)雜度都是On空間復(fù)雜度都是O1https://leetcode-cn.com/problems/roman-to-integer/