LeetCode 13. Roman to Integer
生活随笔
收集整理的这篇文章主要介绍了
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]];elseres -= RtoN[s[i]];}return res;} };相似问题:LeetCode 12. Integer to Roman
LeetCode All in One题解汇总(持续更新中...)
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
转载于:https://www.cnblogs.com/AlvinZH/p/8544038.html
总结
以上是生活随笔为你收集整理的LeetCode 13. Roman to Integer的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: WSGI、uwsgi和uWSGI
- 下一篇: Golang源码探索(三) GC的实现原