leetcode 13 羅馬數字轉整數

2021-09-26 07:12:35 字數 1787 閱讀 4666

羅馬數字包含以下七種字元:

i,v,x,l,c,d和m

字元數值i1

v5x10

l50c100

d500

m1000

例如,羅馬數字2寫作ii,即為兩個並列的1。12寫作xii,即為x+ii。27寫作xxvii,即為xx+v+ii

通常情況下,羅馬數字中小的數字在大的數字的右邊。但是也存在特例,例如4不寫做iiii,而是iv,數字1在數字5的左邊,表示5-1得到4。同樣的,數字9表示ix。這個特殊的規則只適用以下6種情況:

給定乙個羅馬數字,將其轉化成整數。輸入確保在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.

羅馬數字除了6種特殊情況外,總是左邊數字大於等於右邊數字。所以從左到右遍歷數字字串,若左邊大於右邊,加上當前對應的值,否則減去當前對應的值,需要注意的是,最後乙個值要記得加上。

public

intromantoint

(string s)

throws exception

else

} result +=

judgevalue

(s.charat

(index));

//加上最後乙個數字

if(result >

3999

)return result;

}/**

* 對應單個羅馬數字轉化阿拉伯數字的值

*/private

intjudgevalue

(character c)

throws exception

}

我用了乙個switch映**值的6種情況,超過這6種字元就會拋異常,根據題意,當值溢位(要求1-3999)也會拋異常。然後leedcode上我拋異常的**總是編譯不通過。。。。

改正這樣通過了編譯。

public

intromantoint

(string s)

else

} result +=

judgevalue

(s.charat

(index));

return result;

}private

intjudgevalue

(character c)

return0;

}

leetcode 13 羅馬數字轉整數

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

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

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