leetcode題 12 整數轉羅馬數字(中等)

2021-09-25 10:42:07 字數 1752 閱讀 4238

一、題目描述: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...