天天看点

【Leetcode】【Easy】Roman to Integer

Given a roman numeral, convert it to an integer.

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

解题:

将字符形式的罗马数字,转化为整形。输入在1~3999之间。罗马数字的书写规范,请参见罗马数字_百度百科;

本题的关键点在于,如何处理I、X、C三个数字放在大数左边是相减,放在大数右边是相加。

解法是,可以从输入字符串的末端开始,从右向左遍历字符串。对于出现的一般罗马字符,进行累加,当出现I、X、C时,判断当前累加值是否达到(>=)5、50、500。如果达到则为相减,如果未达到,则为相加。

原因是,单反需要相减,必定是在大数的左边,因此必定大数已经出现。

1 class Solution {
 2 public:
 3     int romanToInt(string s) {
 4         int len = s.length();
 5         int sum = 0;
 6         
 7         for (int i=len-1; i>=0; --i) {
 8             if (s[i] == 'I')
 9                 sum += sum >= 5 ? -1 : 1;
10             
11             if (s[i] == 'V')
12                 sum += 5;
13             
14             if (s[i] == 'X')
15                 sum += sum >= 50 ? -10 : 10;
16                 
17             if (s[i] == 'L')
18                 sum += 50;
19                 
20             if (s[i] == 'C')
21                 sum += sum >= 500 ? -100 : 100;
22                 
23             if (s[i] == 'D')
24                 sum += 500;
25             
26             if (s[i] == 'M')
27                 sum += 1000;
28         }
29     
30         return sum;
31     }
32 };