【LeetCode】0013——羅馬數字轉整數

題目描述

在這裏插入圖片描述
在這裏插入圖片描述

解題思路

本題只是上一個題目【整數轉羅馬數字】逆過程,需要注意的是,在遇到I、X、C時我們要繼續判斷它的下一個字符是什麼

1、Java代碼

class Solution {
    public int romanToInt(String s) {
        int result = 0; //存儲結果
        char[] lm = s.toCharArray();
        int len = lm.length;
        for(int i = 0; i < len; i++){ //遍歷每個羅馬字符
            if(lm[i] == 'I'){
                if((i+1) < len && lm[i+1] == 'V'){
                    result += 4;
                    i++;
                }else if((i+1) < len && lm[i+1] == 'X'){
                    result += 9;
                    i++;
                }else{
                    result += 1;
                }
            }else if(lm[i] == 'V'){
                result += 5;
            }else if(lm[i] == 'X'){
                if((i+1) < len && lm[i+1] == 'L'){
                    result += 40;
                    i++;
                }else if((i+1) < len && lm[i+1] == 'C'){
                    result += 90;
                    i++;
                }else{
                    result += 10;
                }
            }else if(lm[i] == 'L'){
                result += 50;
            }else if(lm[i] == 'C'){
                if((i+1) < len && lm[i+1] == 'D'){
                    result += 400;
                    i++;
                }else if((i+1) < len && lm[i+1] == 'M'){
                    result += 900;
                    i++;
                }else{
                    result += 100;
                }
            }else if(lm[i] == 'D'){
                result += 500;
            }else if(lm[i] == 'M'){
                result += 1000;
            }
        }
        return result;
    }
}
class Solution {
    public int romanToInt(String s) {
    	int result = 0;  //存儲結果
        Map<Character, Integer> mp = new HashMap<Character, Integer>();
        mp.put('I', 1);
        mp.put('V', 5);
        mp.put('X', 10);
        mp.put('L', 50);
        mp.put('C', 100);
        mp.put('D', 500);
        mp.put('M', 1000);
        
        
       //遍歷羅馬數字
        for(int i = 0; i < s.length(); i++){
            if(i < s.length() - 1 && mp.get(s.charAt(i)) < mp.get(s.charAt(i+1))){
                result -= mp.get(s.charAt(i));
            }else{
                result += mp.get(s.charAt(i));
            }
        }
        return result;
    }
}

2、Python3代碼

class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        dic = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
        num = 0
        for i in range(len(s)):
            if i < len(s) - 1 and dic[s[i]] < dic[s[i + 1]]:
                num -= int(dic[s[i]])
            else:
                num += int(dic[s[i]])
        return num

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章