羅馬數(shù)字包含以下七種字符:?I,?V菇存,?X,?L邦蜜,C依鸥,D?和?M。public int romanToInt(String s) {
字符? ? ? ? ? 數(shù)值
I? ? ? ? ? ? 1
V? ? ? ? ? ? 5
X? ? ? ? ? ? 10
L? ? ? ? ? ? 50
C? ? ? ? ? ? 100
D? ? ? ? ? ? 500
M? ? ? ? ? ? 1000
例如悼沈, 羅馬數(shù)字 2 寫(xiě)做?II?贱迟,即為兩個(gè)并列的 1。12 寫(xiě)做?XII?絮供,即為?X?+?II?衣吠。 27 寫(xiě)做??XXVII, 即為?XX?+?V?+?II?。
通常情況下壤靶,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊蒸播。但也存在特例,例如 4 不寫(xiě)做?IIII萍肆,而是?IV袍榆。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 塘揣。同樣地包雀,數(shù)字 9 表示為?IX。這個(gè)特殊的規(guī)則只適用于以下六種情況:
I?可以放在?V?(5) 和?X?(10) 的左邊亲铡,來(lái)表示 4 和 9才写。
X?可以放在?L?(50) 和?C?(100) 的左邊葡兑,來(lái)表示 40 和?90。?
C?可以放在?D?(500) 和?M?(1000) 的左邊赞草,來(lái)表示?400 和?900讹堤。
給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)厨疙。輸入確保在 1?到 3999 的范圍內(nèi)洲守。
示例?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.
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/roman-to-integer
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)沾凄,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處梗醇。
解題代碼:
if (s ==null || s.isEmpty()) {
return 0;
? ? ? ? }
Map nums =new HashMap();
? ? ? ? nums.put("I", 1);
? ? ? ? nums.put("V", 5);
? ? ? ? nums.put("X", 10);
? ? ? ? nums.put("L", 50);
? ? ? ? nums.put("C", 100);
? ? ? ? nums.put("D", 500);
? ? ? ? nums.put("M", 1000);
? ? ? ? nums.put("IV", 4);
? ? ? ? nums.put("IX", 9);
? ? ? ? nums.put("XL", 40);
? ? ? ? nums.put("XC", 90);
? ? ? ? nums.put("CD", 400);
? ? ? ? nums.put("CM", 900);
? ? ? ? int count =0;
? ? ? ? for (int i =0; i < s.length();i++) {
String key = String.valueOf(s.charAt(i));
? ? ? ? ? ? if (("I".equals(key) ||"X".equals(key) ||"C".equals(key)) && (i +1 < s.length())) {
String newKey = key + s.charAt(i+1);
? ? ? ? ? ? ? ? if (nums.containsKey(newKey)) {
count += nums.get(newKey);
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? }else {
count += nums.get(key);
? ? ? ? ? ? ? ? }
}else {
if (nums.containsKey(key)) {
count += nums.get(key);
? ? ? ? ? ? ? ? }else {
throw new IllegalArgumentException("illegal char" + key);
? ? ? ? ? ? ? ? }
}
}
return count;
? ? }