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