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;
    }
};
相关文章
|
3月前
|
Java
罗马数字转整数
这篇文章提供了一个Java方法,用于将罗马数字转换为整数,通过一个字符一个字符地解析罗马数字字符串并根据特定规则进行相应的加法或减法运算。
|
6月前
12. 整数转罗马数字
12. 整数转罗马数字
55 1
|
5月前
|
算法
12.整数转罗马数字
12.整数转罗马数字
|
5月前
13.罗马数字转整数
13.罗马数字转整数
|
6月前
|
测试技术
【力扣】13. 罗马数字转整数、12. 整数转罗马数字
【力扣】13. 罗马数字转整数、12. 整数转罗马数字
LeetCode:13、罗马数字转整数
LeetCode:13、罗马数字转整数
|
6月前
|
测试技术 C++
罗马数字转整数(C++)
罗马数字转整数(C++)
66 0
|
6月前
leetcode-13:罗马数字转整数
leetcode-13:罗马数字转整数
39 0
|
6月前
leetcode-12:整数转罗马数字
leetcode-12:整数转罗马数字
40 0
|
6月前
|
存储
【字符串】13. 罗马数字转整数
【字符串】13. 罗马数字转整数