這題要求將一個給定的羅馬數字字串轉換成對應的整數,跟我上一篇文章的要求完全相反。
這題的核心思想也跟我上一篇一模一樣,在於理解羅馬數字的表示規則,特別是相加和相減這兩種情況。
至於相加和相減的規則,我上一篇已經寫過,這裡就不在贅述,有興趣的話就去看我上一篇吧。
這題有用HashMap和switch這兩種方法,我本來想用HashMap這一種,因為這最通用,但寫到一半,發現就是因為這方法最通用,所以太常見了,不如換另一種方法:switch,這個方法比較少見,因為這方法能用的地方比較少,僅限於小型且固定不變的符號集,但在這種情況下,這方法的效率會好於HashMap,算是嘗嚐鮮,試試看其他較少見的寫法。
雖說這HashMap和switch兩種方法有所差異,但解題思路是相同的,都是從左到右遍歷羅馬數字字串。
首先,建立數值對應表:使用HashMap或switch語句來儲存羅馬符號及其對應的整數值。接著,初始化結果:設置一個變數result來儲存最終的整數值,並初始化為0。再來,從右到左遍歷:從字串的最右邊(最後一個字元)開始遍歷到最左邊。最後,比較與計算:在遍歷的過程中,將當前符號的數值與前一個符號的數值(即上一次迴圈的數值)進行比較。如果當前符號的數值大於或等於前一個符號的數值,則執行相加操作:result += currentValue;如果當前符號的數值小於前一個符號的數值(這表示出現了相減的情況,如I在V之前形成IV),則執行相減操作:result -= currentValue。