给定一串串罗马数字,转换为对应整数值
代码如下:
class Solution { public: int romanToInt(string s) { const int sz=s.size()-1; int result=convert(s[sz]),cur=0,fro=0; for(int i=sz-1;i>=0;i--) { cur=convert(s[i+1]); fro=convert(s[i]); if(fro<cur) { result-=fro; } else { result+=fro; } } return result; } inline int convert(char c) { switch(c) { 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; default: return 0; } } };
从后往前扫,判定当前字符cur代表数字和相邻左边字符fro代表数字大小。
当前值cur大于左侧值fro,fro取负,否则fro取正。
将fro累加起来即为转换后的值。