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的实现原