13.Roman to Integer

【题目】

Roman numerals are represented by seven different symbols: I,V,X,L,C,DandM.

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;

results matching ""

    No results matching ""