前往
大廳
主題

LeetCode - 12. Integer to Roman 解題心得

Not In My Back Yard | 2021-04-17 00:00:15 | 巴幣 0 | 人氣 167

題目連結:


題目意譯:
羅馬數字有七個相異符號:I 、 V 、 X 、 L 、 C 、 D 以及 M 。
符號      值
I        1
V        5
X        10
L        50
C        100
D        500
M        1000

例如: 2 在羅馬數字表示法中被寫為 II ,就是兩個 1 並排在一起形成 2 ; 12 被寫作 XII ,即 X + II;數字 27 寫為 XXVII,則是 XX + V + II 。

羅馬數字基本上由大到小、從左至右書寫。但是,數字 4 的表示法並非為 IIII ,而是 IV 。因為寫在 V 前面的 I 代表我們應該要減去那個 I 值而形成了 4 。同樣地, 9 被寫為 IX 而非 XIIII。有六種情況會使用到這種減法規則:
I 可以放在 V (5) 和 X (10) 前面,形成 4 和 9.
X 可以放在 L (50) 和 C (100) 前面,形成 40 和 90.
C 可以放在 D (500) 和 M (1000) 前面,形成 400 和 900.

給定一整數,將其轉為羅馬數字。

限制:
1 ≦ num ≦ 3999



範例測資:
範例 1:
輸入: num = 3
輸出: "III"

範例 2:
輸入: num = 4
輸出: "IV"

範例 3:
輸入: num = 9
輸出: "IX"

範例 4:
輸入: num = 58
輸出: "LVIII"
解釋: L = 50、V = 5、III = 3。

範例 5:
輸入: num = 1994
輸出: "MCMXCIV"
解釋: M = 1000、CM = 900、XC = 90 且 IV = 4。


解題思維:
羅馬數字有十三種符號的「組合」,分別是:
"I",代表 1。
"IV",代表 4。
"V",代表 5。
"IX",代表 9。
"X",代表 10。
"XL",代表 40。
"L",代表 50。
"XC",代表 90。
"C",代表 100。
"CD",代表 400。
"D",代表 500。
"CM",代表 900。
"M" ,代表 1000。

我們只需要從代表值較大的符號組合開始看起,當目前數字 num 所剩的值 ≧ 目前符號組合之值,就表示我們應使用該符號組合,並將數字 num 減去該組合所代表的值。

掃完所有符號之後便可以得到所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作