13. 罗马数字转整数

简介: 13. 罗马数字转整数

题目描述

给你一个字符串s,s中只包含字符串罗马数字。


罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。


I 1

V 5

X 10

L 50

C 100

D 500

M 1000


通常情况下,罗马数字中小的数字在大的数字的右边。


特殊情况:


I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。

C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

解题思路

枚举即可,枚举的时候要注意特殊情况的判断。


即在可以出现特殊情况的字符中,向下一位字符判断一下。

代码

class Solution {
public:
    int romanToInt(string s) {
        unordered_map<string,int> hash(13);
        //枚举
        hash["I"]=1;hash["V"]=5;hash["X"]=10;hash["L"]=50;hash["C"]=100;hash["D"]=500;hash["M"]=1000;
        hash["IV"]=4;hash["IX"]=9;hash["XL"]=40;hash["XC"]=90;hash["CD"]=400;hash["CM"]=900;

        int sum=0;
        for(int i=0;i<s.size();i++)
        {
            string str;
            str+=s[i];
            //特殊情况判断一下
            if((s[i]=='I'||s[i]=='X'||s[i]=='C')&&i+1<s.size()&&hash.count(str+s[i+1]))
            {
                i++;
                str+=s[i];
            }

            sum+=hash[str];
        }
        return sum;
    }
};
相关文章
|
12天前
13.罗马数字转整数
13.罗马数字转整数
|
12天前
|
算法
12.整数转罗马数字
12.整数转罗马数字
|
1月前
12. 整数转罗马数字
12. 整数转罗马数字
29 1
|
1月前
|
测试技术
【力扣】13. 罗马数字转整数、12. 整数转罗马数字
【力扣】13. 罗马数字转整数、12. 整数转罗马数字
|
10月前
LeetCode:13、罗马数字转整数
LeetCode:13、罗马数字转整数
|
11月前
|
Python
罗马数字转整数
罗马数字转整数
65 0
|
1月前
|
测试技术 C++
罗马数字转整数(C++)
罗马数字转整数(C++)
37 0
|
1月前
leetcode-12:整数转罗马数字
leetcode-12:整数转罗马数字
22 0
|
1月前
leetcode-13:罗马数字转整数
leetcode-13:罗马数字转整数
22 0
|
1月前
|
存储
【字符串】13. 罗马数字转整数
【字符串】13. 罗马数字转整数