leetcode-cn.com/problems/ro…java
羅馬數字包含如下七種字符: 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
。bash
一般狀況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4
不寫作 IIII
,而是 IV
。數字 1
在數字 5
的左邊,所表示的數等於大數 5
減少數 1
獲得的數值 4
。一樣地,數字 9
表示爲 IX
。這個特殊的規則只適用於如下六種狀況:spa
I
能夠放在 V
(5) 和 X
(10) 的左邊,來表示 4
和 9
。 X
能夠放在 L
(50) 和 C
(100) 的左邊,來表示 40
和 90
。 C
能夠放在 D
(500) 和 M
(1000) 的左邊,來表示 400
和 900
。 給定一個羅馬數字,將其轉換成整數。輸入確保在 1
到 3999
的範圍內。3d
示例 1:code
輸入: "III"
輸出: 3
複製代碼
示例 2:cdn
輸入: "IV"
輸出: 4
複製代碼
示例 3:blog
輸入: "IX"
輸出: 9
複製代碼
示例 4:ip
輸入: "LVIII"
輸出: 58
解釋: L = 50, V= 5, III = 3.
複製代碼
示例 5:leetcode
輸入: "MCMXCIV"
輸出: 1994
解釋: M = 1000, CM = 900, XC = 90, IV = 4.
複製代碼
class Solution {
public int romanToInt(String s) {
Map<String, Integer> map = new HashMap<>();
map.put("I", 1);
map.put("IV", 4);
map.put("V", 5);
map.put("IX", 9);
map.put("X", 10);
map.put("XL", 40);
map.put("L", 50);
map.put("XC", 90);
map.put("C", 100);
map.put("CD", 400);
map.put("D", 500);
map.put("CM", 900);
map.put("M", 1000);
int ans = 0;
for(int i = 0;i < s.length();) {
if(i + 1 < s.length() && map.containsKey(s.substring(i, i+2))) {
ans += map.get(s.substring(i, i+2));
i += 2;
} else {
ans += map.get(s.substring(i, i+1));
i ++;
}
}
return ans;
}
}
複製代碼
/** * @param {string} s * @return {number} */
var romanToInt = function(s) {
const map = {
I : 1,
IV: 4,
V: 5,
IX: 9,
X: 10,
XL: 40,
L: 50,
XC: 90,
C: 100,
CD: 400,
D: 500,
CM: 900,
M: 1000
};
let ans = 0;
for(let i = 0;i < s.length;) {
if(i + 1 < s.length && map[s.substring(i, i+2)]) {
ans += map[s.substring(i, i+2)];
i += 2;
} else {
ans += map[s.substring(i, i+1)];
i ++;
}
}
return ans;
};
複製代碼
後臺回覆「算法」,加入每天算法羣 以爲算法直擊靈魂,歡迎點擊在看和轉發