Leetcode-Roman to Integer(java)

1 Description(描述)

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
羅馬數字通過其中不同的符號來表示:I, V, X, L, C, D 和 M。

Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

For example, two is written as II in Roman numeral, just two one’s added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.
舉個例子,2用羅馬數字表示爲 II,僅僅將兩個 I 加到一起。12寫成 XII 。27寫成 XXVII。

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

  • I can be placed before V (5) and X (10) to make 4 and 9.
  • X can be placed before L (50) and C (100) to make 40 and 90.
  • C can be placed before D (500) and M (1000) to make 400 and 900.

羅馬數字通常都是從大到小、從左到右。然而,羅馬數字表示4不是 IIII 。反而,4寫爲 IV 。因爲1在5之前,我們減掉他變成4。相同的道理適合9,它表示成 IX。使用減法的例子有六種:

  • 把 I 放到 V 和 X 之前可以表示 4 和 9.
  • 把 X 放到 L 和 C 之前可以表示 40 和 90.
  • 把 C 放到 D 和 M 之前可以表示 400 和 900.

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
給定一個羅馬數字,將它轉化成一個整數。輸入值在1~3999。

Example 1:
Input: “III”
Output: 3

Example 2:
Input: “IV”
Output: 4

Example 3:
Input: “IX”
Output: 9

Example 4:
Input: “LVIII”
Output: 58
Explanation: L = 50, V= 5, III = 3.

Example 5:
Input: “MCMXCIV”
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

2 Solution(解決方案)

官網沒有給標準答案,以下是我的代碼。

public static int romanToInt(String s){
	HashMap<Character,Integer> hash = new HashMap<Character,Integer>(){{
		put('I', 1);
		put('V', 5);
		put('X', 10);
		put('L', 50);
		put('C', 100);
		put('D', 500);
		put('M', 1000);
	}};
	char romans[] = s.toCharArray();
	int sum = 0;
	for(int i = 0; i < romans.length - 1; i++){
		int temp1 = hash.get(romans[i]);
		int temp2 = hash.get(romans[i+1]);
		if(temp1 < temp2 ){
			sum -= temp1;
		}else{
			sum += temp1;
		}
	}
	return sum + hash.get(romans[romans.length - 1]);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章