Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路:从千位到个位依次进行字符串匹配,记录对应十进制每位上的数值。(每次匹配成功后,更新原字符串为剩余的子串)
代码:
class Solution { public: int romanToInt(string s) { string c [4][10] = { {"","I","II","III","IV","V","VI","VII","VIII","IX"}, {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}, {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}, {"","M","MM","MMM"} }; int count[4] = {0,0,0,0}; size_t found = 0; for(int i = 3; i >= 1; -- i){ found = s.find(c[3][i]); if(found == 0){ s = s.substr(c[3][i].length()); count[3] = i; break; } } cout << count[3] << endl; for(int i = 9; i >= 1; -- i){ found = s.find(c[2][i]); if(found == 0){ s = s.substr(c[2][i].length()); count[2] = i; break; } } cout << count[2] << endl; for(int i = 9; i >= 1; -- i){ found = s.find(c[1][i]); if(found == 0){ s = s.substr(c[1][i].length()); count[1] = i; break; } } cout << count[1] << endl; for(int i = 9; i >= 1; -- i){ found = s.find(c[0][i]); if(found == 0){ count[0] = i; break; } } cout << count[0] << endl; int sum = 1000*count[3]+100*count[2]+10*count[1]+count[0]; return sum; } };