羅馬數字轉數字 leetcode訓練

2021-09-21 01:12:17 字數 3066 閱讀 2175

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

輸入: 「iii」

輸出: 3

示例 2:

輸入: 「iv」

輸出: 4

示例 3:

輸入: 「ix」

輸出: 9

示例 4:

輸入: 「lviii」

輸出: 58

解釋: l = 50, v= 5, iii = 3.

示例 5:

輸入: 「mcmxciv」

輸出: 1994

解釋: m = 1000, cm = 900, xc = 90, iv = 4.

class

solution

elseif(

"i".

equals

(arrays[i])&&

"x".

equals

(arrays[i+1]

))elseif(

"x".

equals

(arrays[i])&&

"l".

equals

(arrays[i+1]

))elseif(

"x".

equals

(arrays[i])&&

"c".

equals

(arrays[i+1]

))elseif(

"c".

equals

(arrays[i])&&

"d".

equals

(arrays[i+1]

))elseif(

"c".

equals

(arrays[i])&&

"m".

equals

(arrays[i+1]

))}}

return ans ;

}}

很可惜,邏輯不清楚,寫的也有錯誤,在測試時

輸入:「mcmxciv」

輸出:4

預期:1994

1.基本數字 ⅰ、x 、c 中的任何乙個、自身連用構成數目、或者放在大數的右邊連用構成數目、都不能超過三個;放在大數的左邊只能用乙個;

2.不能把基本數字 v 、l 、d 中的任何乙個作為小數放在大數的左邊採用相減的方法構成數目;放在大數的右邊採用相加的方式構成數目、只能使用乙個;

class

solution

mapmap =

newhashmap

(); map.

put(

'i',1)

; map.

put(

'v',5)

; map.

put(

'x',10)

; map.

put(

'l',50)

; map.

put(

'c',

100)

; map.

put(

'd',

500)

; map.

put(

'm',

1000);

int len = s.

length()

;int result = map.

get(s.

charat

(len-1)

);for(

int i = len -

2;i >=

0;i--

)else

}return result ;

}}

hashmap

map =

newhashmap

(); map.

put(

'i',1)

; map.

put(

'v',5)

; map.

put(

'x',10)

; map.

put(

'l',50)

; map.

put(

'c',

100)

; map.

put(

'd',

500)

; map.

put(

'm',

1000

);

我之前寫的是string型別,然後

int result = map.

get(s.

charat

(len-1)

);

會報陣列越界。也不知道為什麼。

他這樣倒著迴圈,從length-2到0,解決了我之前判斷 i 和 i+1 的值,防止 i+1 陣列越界我會讓他在 i+1 < length的條件下執行,這也直接導致了我在轉換時總會少一位。如果在判斷外再加一次,那麼像「iv」這樣右邊比左邊大的就會出現4+5==9的情況。倒著迴圈很好的解決了我的問題。

羅馬轉數字

羅馬數字包含以下七種字元 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 通常情況下,羅馬數字中...

LeetCode 羅馬數字轉整型

羅馬數字包含以下七種字元 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。通常情況下,羅馬數字中小的數字在大的數...

LeetCode 羅馬數字轉整數

一.羅馬數字轉整數 羅馬數字包含以下七種字元 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 通常...