羅馬數字包含以下七種字元:
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」例項2:輸出:「3」
輸入:「iv」例項3:輸出:「4」
輸入:「ix」示例 4:輸出:「9」
輸入: 「lviii」示例 5:輸出: 58
解釋: l = 50, v= 5, iii = 3.
輸入: 「mcmxciv」羅馬數字除了6種特殊情況外,總是左邊數字大於等於右邊數字。所以從左到右遍歷數字字串,若左邊大於右邊,加上當前對應的值,否則減去當前對應的值,需要注意的是,最後乙個值要記得加上。輸出: 1994
解釋: m = 1000, cm = 900, xc = >90, iv = 4.
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 通常情況下,羅馬數字中小...