13. Roman to Integer
介绍
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
解答
class Solution {
public:
// 在保证输入内容合法的情况下,如下操作进行Roman 到 Int的转换
int romanToInt(string s) {
if(s.empty()) return 0;
unordered_map<char,int> romToInt{{'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000},};
int i = 0;
int res = 0;
while(i < s.size()-1)
{
if(romToInt[s[i]] >= romToInt[s[i+1]])
{
res += romToInt[s[i]];
++i;
}else
{
res += romToInt[s[i+1]] - romToInt[s[i]];
i += 2;
}
}
if(i == s.size() - 1) {res += romToInt[s[i]];}
return res;
}
};
12. Integer to Roman
介绍
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
解答
class Solution {
public:
string intToRoman(int num) {
vector<pair<char,char>> romans;
romans.push_back(make_pair('I','V'));
romans.push_back(make_pair('X','L'));
romans.push_back(make_pair('C','D'));
romans.push_back(make_pair('M','M'));
string res;
int base = 1000, index = 3;
while(index >= 0)
{
int val = num/base;
switch(val)
{
case(1): case(2):case(3):
{
while(val-- > 0) res.push_back(romans[index].first);
break;
}
case(4):
{
res.push_back(romans[index].first);
res.push_back(romans[index].second);
break;
}
case(5):
{
res.push_back(romans[index].second);
break;
}
case(6): case(7): case(8):
{
res.push_back(romans[index].second);
val -= 5;
while(val-- > 0) res.push_back(romans[index].first);
break;
}
case(9):
{
res.push_back(romans[index].first);
res.push_back(romans[index+1].first);
}
default: break;
}
num = num % base;
base = base/10;
--index;
}
return res;
}
};