lintcode之罗马数字转整数,原题如下所示:
给定一个罗马数字,将其转换成整数。
返回的结果要求在1到3999的范围内。
IV
-> 4
XII
-> 12
XXI
-> 21
XCIX
-> 99
具体思路如下:
1、首先将罗马数字里面特殊的字符表示出来,使用switch,case语句;
2、考虑到若左边的数小于右边的数,应该是相减,反之应相加,对这两种情况用一个方法表示出来。即若是左边大于先将罗马数字除了最后一位之外全部加上,若是左边小于右边,则加上负的,最后统一再加上最后一位数字表示的整数值。
具体实现的c++代码如下:
class Solution {
public:
/**
* @param s Roman representation
* @return an integer
*/
int singleword(char a)
{
switch(a)
{
case 'I' : return 1;
case 'V' : return 5;
case 'X' : return 10;
case 'L' : return 50;
case 'C' : return 100;
case 'D' : return 500;
case 'M' : return 1000;
}
return -1;
}
int romanToInt(string& s) {
// Write your code here
int l=s.size();
if(l==0)
{
return 0;
}
int i;
int sum=0;
for(i=0;i<l-1;i++)
{
if(singleword(s[i])>=singleword(s[i+1]))
{
sum+=singleword(s[i]);
}
else
{
sum-=singleword(s[i]);
}
}
sum+=singleword(s[l-1]);
return sum;
}
};