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題