题目描述:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析:
题意:给定一个罗马数字(范围是1~3999),把它转化为对应的阿拉伯数字。
思路:这是一道数学题,跟LeetCode 12是互逆的关系。我们需要知道阿拉伯数字和罗马数字的转化关系:罗马基本字符和对应的阿拉伯数字为M→1000,D→500,C→100,L→50,X→10,V→5,I→1。
从左到右扫描罗马字符,如果当前字符比后一个大,则答案加上对应的阿拉伯数值;否则减去对应的阿拉伯数值(比如CM组合,对应的值为1000-100=900)。最后加上最后一个罗马字符对应的阿拉伯数值。
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int romanToInt(string s) {
// Exceptional Case:
int n = s.length();
if(n == 0){
return 0;
}
map<char, int> m;
m['M'] = 1000;
m['D'] = 500;
m['C'] = 100;
m['L'] = 50;
m['X'] = 10;
m['V'] = 5;
m['I'] = 1;
int ans = 0;
for(int i = 0; i <= n - 2; i++){
ans += (m[s[i]] < m[s[i + 1]]? -m[s[i]]: m[s[i]]);
}
ans += m[s[n - 1]];
return ans;
}
};