一、題目描述:12. 整數轉羅馬數字(中等)
羅馬數字包含以下七種字元: i, v, x, l,c,d 和 m。二、解題思路字元 數值
i 1
v 5
x 10
l 50
c 100
d 500
m 1000
例如, 羅馬數字 2 寫做 ii ,即為兩個並列的 1。12 寫做 xii ,即為 x + ii 。 27 寫做 xxvii, 即為 xx + v + ii 。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 iiii,而是 iv。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 ix。這個特殊的規則只適用於以下六種情況:
i 可以放在 v (5) 和 x (10) 的左邊,來表示 4 和 9。
x 可以放在 l (50) 和 c (100) 的左邊,來表示 40 和 90。
c 可以放在 d (500) 和 m (1000) 的左邊,來表示 400 和 900。
給定乙個整數,將其轉為羅馬數字。輸入確保在 1 到 3999 的範圍內。
示例 1:
輸入: 3
輸出: "iii"
示例 2:
輸入: 4
輸出: "iv"
示例 3:
輸入: 9
輸出: "ix"
示例 4:
輸入: 58
輸出: "lviii"
解釋: l = 50, v = 5, iii = 3.
示例 5:
輸入: 1994
輸出: "mcmxciv"
解釋: m = 1000, cm = 900, xc = 90, iv = 4.
1、數字十進位制,從低位到高位開始遍歷。count 初始化為1。表示當前是第幾位,比如count = 10,當前數字位數是在十位上;
2、每位數字mod = num%count有0~9種情況,在羅馬數字中分為0~3,4,5~8,9四種情況
3、mod在0~3的情況就是對應羅馬數字的有mod個count*1的字元,比如count = 10,mod =3,則對應***表示30。
4、mod = 4的時候是題目中的特殊情況,對應羅馬字元是count*1的字元加上count*5的字元,比如count = 10,mod = 4,對羅馬字元就是xl表示40
5、mod 在5~8的情況對應的是1個count*5的字元加上mod%5個count*1的字元,比如count = 10,mod = 6,對應羅馬字元就是lx
6、mod = 9的時候也是題目中的特殊情況,對應羅馬字元是,count *1的字元加上count*10的字元,比如count = 10,mod = 9,對應的羅馬字元就是xc,表示90
三、**
class solution
}else if(mod == 4)
else if(mod == 9)
else
rome_str.insert(0,rome[count*5]);
}count *= 10;
num = num/10;
}return rome_str;
}};
LeetCode刷題筆記 12 整數轉羅馬數字
羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中小...
leetcode演算法題12 整數轉羅馬數字
羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中小...
LeetCode12 整數轉羅馬數字
題目大意 將乙個1到3999範圍內的整數轉為羅馬數字 題目分析 首先熟悉轉換規則,然後可以使用兩個list儲存對應的對映關係,然後每次從大到小看num是否大於1000,大於900,大於500,若在某個區間的話,就將羅馬數字加進來,num減去相應的數值,直到num為0 展示 class solutio...