題目詳情:
羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。
字符 數值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 羅馬(ma)數字(zi) 2 寫(xie)做 II ,即(ji)為(wei)兩個并列的 1 。12 寫(xie)做 XII ,即(ji)為(wei) X + II 。 27 寫(xie)做 XXVII, 即(ji)為(wei) XX + V + II 。
通常(chang)情(qing)況(kuang)下,羅馬數(shu)字(zi)(zi)中小(xiao)(xiao)的數(shu)字(zi)(zi)在大的數(shu)字(zi)(zi)的右(you)邊。但也(ye)存(cun)在特(te)例,例如 4 不寫做 IIII,而是 IV。數(shu)字(zi)(zi) 1 在數(shu)字(zi)(zi) 5 的左邊,所表示(shi)的數(shu)等于大數(shu) 5 減小(xiao)(xiao)數(shu) 1 得(de)到(dao)的數(shu)值 4 。同樣地,數(shu)字(zi)(zi) 9 表示(shi)為(wei) IX。這個(ge)特(te)殊的規則只適(shi)用(yong)于以下六(liu)種情(qing)況(kuang):
I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給(gei)定一(yi)個(ge)羅馬數(shu)字(zi),將其轉換成整數(shu)。
示例:
輸入: s = "III"
輸出: 3
解題思路:
定義一個變量 result 來保存轉換后的整數,初始化為 0。另外再定義一個變量 prevValue 來保存(cun)當前字(zi)符(fu)的前一(yi)個字(zi)符(fu)表示的值。
從字(zi)符(fu)(fu)(fu)串的(de)最后(hou)一個字(zi)符(fu)(fu)(fu)開始(shi)向(xiang)前(qian)(qian)遍歷,獲取當(dang)前(qian)(qian)字(zi)符(fu)(fu)(fu)表(biao)示(shi)(shi)的(de)值,并與前(qian)(qian)一個字(zi)符(fu)(fu)(fu)對應的(de)值進行比(bi)較。如果當(dang)前(qian)(qian)字(zi)符(fu)(fu)(fu)表(biao)示(shi)(shi)的(de)值小于前(qian)(qian)一個字(zi)符(fu)(fu)(fu)表(biao)示(shi)(shi)的(de)值,則需要減去當(dang)前(qian)(qian)值;否則,累(lei)加(jia)當(dang)前(qian)(qian)值。
在每次循環中,需要更新 prevValue 的值為當(dang)前字符表(biao)示的值,以供下一次循環使用。
代碼實現: