列表

详情


13. 罗马数字转整数

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
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 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

给定一个罗马数字,将其转换成整数。

 

示例 1:

输入: s = "III"
输出: 3

示例 2:

输入: s = "IV"
输出: 4

示例 3:

输入: s = "IX"
输出: 9

示例 4:

输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:

输入: s = "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

 

提示:

相似题目

整数转罗马数字

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int romanToInt(string s) { } };

javascript 解法, 执行用时: 120 ms, 内存消耗: 46.7 MB, 提交时间: 2023-11-17 17:46:14

/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {
    const symbolValues = new Map();
    symbolValues.set('I', 1);
    symbolValues.set('V', 5);
    symbolValues.set('X', 10);
    symbolValues.set('L', 50);
    symbolValues.set('C', 100);
    symbolValues.set('D', 500);
    symbolValues.set('M', 1000);  
    let ans = 0;
    const n = s.length;
    for (let i = 0; i < n; ++i) {
        const value = symbolValues.get(s[i]);
        if (i < n - 1 && value < symbolValues.get(s[i + 1])) {
            ans -= value;
        } else {
            ans += value;
        }
    }
    return ans;
};

java 解法, 执行用时: 4 ms, 内存消耗: 42.9 MB, 提交时间: 2023-11-17 17:45:58

class Solution {
    Map<Character, Integer> symbolValues = 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);
    }};

    public int romanToInt(String s) {
        int ans = 0;
        int n = s.length();
        for (int i = 0; i < n; ++i) {
            int value = symbolValues.get(s.charAt(i));
            if (i < n - 1 && value < symbolValues.get(s.charAt(i + 1))) {
                ans -= value;
            } else {
                ans += value;
            }
        }
        return ans;
    }
}

golang 解法, 执行用时: 12 ms, 内存消耗: 2.6 MB, 提交时间: 2023-11-17 17:45:23

var symbolValues = map[byte]int{'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}

func romanToInt(s string) (ans int) {
    n := len(s)
    for i := range s {
        value := symbolValues[s[i]]
        if i < n-1 && value < symbolValues[s[i+1]] {
            ans -= value
        } else {
            ans += value
        }
    }
    return
}

python3 解法, 执行用时: 44 ms, 内存消耗: 14.9 MB, 提交时间: 2021-05-15 16:33:25

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

cpp 解法, 执行用时: 956 ms, 内存消耗: N/A, 提交时间: 2018-08-22 17:39:18

class Solution {
public:
    int romanToInt(string s) {
        int tagVal[256];
        tagVal['I'] = 1;
        tagVal['V'] = 5;
        tagVal['X'] = 10;
        tagVal['C'] = 100;
        tagVal['M'] = 1000;
        tagVal['L'] = 50;
        tagVal['D'] = 500;
        int val = 0;
        for(int i = 0; i < s.length(); i++){
            if(i+1 >= s.length() || tagVal[s[i+1]] <= tagVal[s[i]])
                val += tagVal[s[i]];
            else
                val -= tagVal[s[i]]; 
        }
        return val; 
    }
};

python3 解法, 执行用时: 152 ms, 内存消耗: N/A, 提交时间: 2018-08-22 17:37:29

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

上一题