LeetCode之12 整數轉羅馬數字

2021-09-19 04:40:29 字數 1999 閱讀 8576

題目內容:

羅馬數字包含以下七種字元: 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 。

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 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.

解題過程:

這道題被判斷為中等,但是貌似不難…可能是我做的方法很簡單吧!

在看到這道題時,我的第一反應是用switch去做,後來在做題的時候用的確是if判斷,現在想想用switch好像**更簡潔(有空試試)

①其實做這道題最重要的就是了解羅馬數字有幾種情況:除了單個的羅馬數字還有六種組合型的羅馬數字,

②判斷這個數字符合這些情況的範圍,再減去選中的範圍數值,得到下乙個判斷數值

③重複②的做法

如何從這個迴圈中跳出呢?當整型數字為0時,則跳出,所以可以用此作為判斷條件。

這裡有幾點想說一下:

1)一開始做的時候,由於原來一直使用的是break跳出迴圈,這次第一反應也是,後面想想,不對,我在這次判斷以後還是得回去接著判斷的,能夠跳出接下來的操作,又不跳出迴圈的,就是continue了(這就是我覺得用switch比較好的原因了,不用糾結這一點,**又美觀)

2)其實當數值變為9,4就可以直接跳出迴圈了,因為不會有下一步的操作了,小技巧,**執行大概會快那麼一丟丟吧

詳細**:

class solution else if(a >= 900) else if(a >= 500) else if(a >= 400) else if(a >= 100) else if(a >= 90) else if(a >= 50) else if(a >= 40) else if(a >= 10) else if(a == 9) else if(a >= 5) else if(a == 4) else if(a >= 1) 

} return ans;

}}

在做完這道題以後,我看了別人的做法,發現了一種類似於數字字典的做法,執行快,占用記憶體也不大,這裡貼一下相互學習一哈(來自使用者:fabrizio3):

public static string inttoroman(int num) ;

string c = ;

string x = ;

string i = ;

return m[num/1000] + c[(num%1000)/100] + x[(num%100)/10] + i[num%10];

}

小聲嗶嗶一下:真的得看一下別人做的,發現好多大佬!

從頭做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...

Leetcode演算法 12 整數轉羅馬數字

給定乙個整數,將其轉為羅馬數字。整數的範圍為 1 3999。羅馬數字可以由7個符號來表示 i,v,x,l,c,d 和 m.符號值 i1v5 x10l50 c100 d500 m1000 比如,2的羅馬數字為ii,即兩個1加起來。12的羅馬數字為xii,即x ii。27的羅馬數字為xxvii,即xx ...