這是我參與更文挑戰的第6天,活動詳情查看: 更文挑戰java
本文正在參加「Java主題月 - Java 開發實戰」,詳情查看 活動連接面試
我是陳皮,一個在互聯網 Coding 的 ITer,微信搜索「陳皮的JavaLib」第一時間閱讀最新文章,回覆【資料】,便可得到我精心整理的技術資料,電子書籍,一線大廠面試資料和優秀簡歷模板。微信
羅馬數字包含如下七種字符: I, V, X, L,C,D 和 M。markdown
字符 | 數值 |
---|---|
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 。post
一般狀況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫作 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減少數 1 獲得的數值 4 。一樣地,數字 9 表示爲 IX。這個特殊的規則只適用於如下六種狀況:測試
給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。spa
示例1:code
示例2:orm
示例3:圖片
示例4:
示例5:
提示
題目來源:LeetCode
LXVII
都是小的數字在大的數字的右邊,則 LXVII = L + X + V + I + I = 50 + 10 + 5 + 1 + 1 = 67
IV = -I + V = -1 + 5 = 4
package com.chenpi;
import java.util.HashMap;
import java.util.Map;
public class RomanToInt {
// 規則
Map<Character, Integer> ruleMap = new HashMap<>();
{
ruleMap.put('I', 1);
ruleMap.put('V', 5);
ruleMap.put('X', 10);
ruleMap.put('L', 50);
ruleMap.put('C', 100);
ruleMap.put('D', 500);
ruleMap.put('M', 1000);
}
public int romanToInt(String s) {
int num = 0;
int length = s.length();
for (int i = 0; i < length; ++i) {
int value = ruleMap.get(s.charAt(i));
if (i < length - 1 && value < ruleMap.get(s.charAt(i + 1))) {
num -= value;
} else {
num += value;
}
}
return num;
}
public static void main(String[] args) {
System.out.println(new RomanToInt().romanToInt("MCMXCIV"));
}
}
複製代碼
下一題:敬請期待