13.Roman to Integer
【题目】
Roman numerals are represented by seven different symbols: I
,V
,X
,L
,C
,D
andM
.
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
羅馬數字包含以下七種字符:I, V, X, L,C,D 和 M。
給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。
Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
Example 1:
Input:
"III"
Output:
3
Example 2:
Input:
"IV"
Output:
4
【思路】
看到這題先將 原則先整理出Map,並考量到羅馬數字的邏輯 V=5 , I=1 ,IV=4 (5-1=4),
考量到上述這些其實解法很簡單了
【解法】
☆JAVA
老實說用Java還蠻麻煩的,用Python就很快 XD
class Solution {
public int romanToInt(String s) {
int result = 0;
if(s != ""){
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("I", 1);
map.put("V", 5);
map.put("X", 10);
map.put("L", 50);
map.put("C", 100);
map.put("D", 500);
map.put("M", 1000);
for(int i = 0 ; i<s.length() ; i++){
String temp = s.charAt(i)+"";
int value = 0;
if(map.containsKey(temp)){
value = map.get(temp);
if(i != 0 && (map.get(s.charAt(i-1)+"") < map.get(temp)) ){
value = value - (map.get(s.charAt(i-1)+""))*2;
}
result = result + value;
}
}
}
return result;
}
}
☆Python
def romanToInt(self, x):
result = 0;
map = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} #業務邏輯
for s in range(len(x)): #迴圈取出陣列指標
if(map[x[s]]): #防呆一下
temp = map[x[s]];
if(s != 0 and map[x[s-1]] < map[x[s]]): #如果不是第一個且前一個數值比當前值小
temp = temp - (map[x[s-1]])*2; #就減掉 X2 是因為我下一段不管怎樣會先加進去了 所以減兩次
result = result + temp ;
return result;