本文最后更新于:25 天前
13. 罗马数字转整数
题目描述
规则同题【12.整数转罗马数字】,只是转换方向相反,由罗马数字转换为整数。
题解
解法一:从小到大遍历
由于罗马数字中,”V”、”X”、”L”、”C”、”D”、”M” 这几个字符可能存在前缀,因此当遇到这几个字符时,需要额外判断前一位是否为对应的前缀。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| class Solution { public: int romanToInt(std::string s) { int x = 0; for (int i = s.size() - 1; i >= 0; i--) { if (s[i] == 'I') { x += 1; } else if (s[i] == 'V') { if (i > 0 && s[i - 1] == 'I') { x += 4; i--; } else { x += 5; } } else if (s[i] == 'X') { if (i > 0 && s[i - 1] == 'I') { x += 9; i--; } else { x += 10; } } else if (s[i] == 'L') { if (i > 0 && s[i - 1] == 'X') { x += 40; i--; } else { x += 50; } } else if (s[i] == 'C') { if (i > 0 && s[i - 1] == 'X') { x += 90; i--; } else { x += 100; } } else if (s[i] == 'D') { if (i > 0 && s[i - 1] == 'C') { x += 400; i--; } else { x += 500; } } else if (s[i] == 'M') { if (i > 0 && s[i - 1] == 'C') { x += 900; i--; } else { x += 1000; } } } return x; } };
|