13. 罗马数字转整数
Posted Mrsdwang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13. 罗马数字转整数相关的知识,希望对你有一定的参考价值。
思路:
一开始是打算用hash表来记录每个字母代表的数字的,但是想了一下好像直接if判断来加也可以,然后就开始if了。
然后想判断IV IX这类的的时候判断条件设置的是i!=n-1&&s[i+1]=\'V\'这样的,也是能做的,但是if太多了。
我这时候并没有想到IV这种情况可以概括为小的数放在大的数左边,然后用hash表记录了各种字母代表的数后还是用了很多if来写。
看了题解才直到是这个规律。罗马数从左到右是降序的,所以如果有小的数出现在大的数的左边,那么就减去小的数的值就可以了,那么很多if就可以只用一个条件来写了。
代码:
class Solution {
public:
int Getvalue(char ch){
switch(ch){
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 0;
}
int romanToInt(string s) {
int n = s.length();
int res=0;
for(int i=0;i<n;++i){
int temp = Getvalue(s[i]);
if(i!=n-1&&temp<Getvalue(s[i+1])){
res -= temp;
}
else res+=temp;
}
return res;
}
};
以上是关于13. 罗马数字转整数的主要内容,如果未能解决你的问题,请参考以下文章