LeetCode 13. Roman to Integer

Posted AlvinZH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 13. Roman to Integer相关的知识,希望对你有一定的参考价值。

问题链接

LeetCode 13. Roman to Integer

题目解析

将罗马数字转换成普通数字。

解题思路

先简单了解一下什么是罗马数字

基本字符:I,V,X,L,C,D,M
相应的阿拉伯数字表示为:1,5,10,50,100,500,1000

  • 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
  • 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
  • 小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
  • 正常使用时、连写的数字重复不得超过三次;
  • 在一个数的上面画一条横线、表示这个数扩大 1000 倍。

有点复杂,还好这道题没有让我们判断是否是罗马数字。输入已经保证合法,我们只要转换就可以了,总结起来就两条:

  • 此数字为最后的数字或者下一个数小于此数字,则加上此数;
  • 否则,减去此数字。

参考代码

class Solution {
public:
    int romanToInt(string s) {
        int res = 0;
        unordered_map<char, int> RtoN{{\'I\', 1}, {\'V\', 5}, {\'X\', 10},
                                   {\'L\', 50}, {\'C\', 100}, {\'D\', 500},
                                   {\'M\', 1000}};
        for (int i = 0; i < s.size(); i++) {
            if (i == s.size()-1 || RtoN[s[i+1]] <= RtoN[s[i]])
                res += RtoN[s[i]];
            else
                res -= RtoN[s[i]];
        }
        return res;
    }
};

相似问题:LeetCode 12. Integer to Roman


LeetCode All in One题解汇总(持续更新中...)

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


以上是关于LeetCode 13. Roman to Integer的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 13. Roman to Integer(python)

leetcode13. Roman to Integer

[LeetCode][13]Roman to Integer解析 罗马字符转int类型关于栈的常数实现-Java实现

[LeetCode][13]Roman to Integer解析 罗马字符转int类型关于栈的常数实现-Java实现

6:Leetcode13:Roman to Integer笔记

LeetCode 13. Roman to Integer