013 Roman to Integer[E]

1 題目描述

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

難度:Easy

2 題目樣例

無。

3 題目分析

給出羅馬數字,要求輸出與之對應的阿拉伯數字。

呃......題設可以說是簡單粗暴的可以了。

4 思路分析

水題。

參考第12題的思路,逆向推導即可,用switch語句能讓代碼看起來簡潔些。

注意要處理好CD,CM,XL等情況,其他均可以直接累加。

代碼實現如下:

class Solution { public: int romanToInt(string s) { int ans=0; for(int i=0;i<s.size();i++) { switch(s[i]) { case M: ans+=1000; break; case D: ans+=500; break; case C: if(i+1<s.size()&&(s[i+1]==D||s[i+1]==M)) ans-=100; else ans+=100; break; case L: ans+=50; break; case X: if(i+1<s.size()&&(s[i+1]==L||s[i+1]==C)) ans-=10; else ans+=10; break; case V: ans+=5; break; case I: if(i+1<s.size()&&(s[i+1]==V||s[i+1]==X)) ans-=1; else ans+=1; break; } } return ans; }};

5 後記

恕我直言,這題除了讓我知道了羅馬字母還包含"C","D"等字母之外(以前我一直以為到X就截止了),毫無實際意義。

民意如此。(笑)

推薦閱讀:

[leetcode algorithms]題目19
[leetcode algorithms]題目5
做ACM演算法用什麼開發工具比較好呢?
9. Palindrome Number(easy)
Leetcode 簡略題解 - 共567題

TAG:演算法 | 演算法設計 | LeetCode |