题意:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析:
开始准备采用将罗马数字的字符串先划分千位,百位等,但是实际操作起来代码太复杂,而且自己想的逻辑也有问题。
最后采用的方式是从前到后遍历一遍字符即可,加判断来查看字符是不是与前面字符一起组成“小数在大数左边的数字”;
然后依次加数到结果进去即可。
代码:
1 class Solution { 2 public: 3 int romanToInt(string s) { 4 int result = 0; 5 for (int i = 0; i < s.size(); ++i) { 6 if (s[i] == ‘M‘) { 7 if (i - 1 >= 0 && s[i-1] == ‘C‘) { 8 result += 800; 9 } 10 else { 11 result += 1000; 12 } 13 } 14 if (s[i] == ‘D‘) { 15 if (i - 1 >= 0 && s[i-1] == ‘C‘) { 16 result += 300; 17 } 18 else { 19 result += 500; 20 } 21 } 22 if (s[i] == ‘C‘) { 23 if (i - 1 >= 0 && s[i-1] == ‘X‘) { 24 result += 80; 25 } 26 else { 27 result += 100; 28 } 29 } 30 if (s[i] == ‘L‘) { 31 if (i - 1 >= 0 && s[i-1] == ‘X‘) { 32 result += 30; 33 } 34 else { 35 result += 50; 36 } 37 } 38 if (s[i] == ‘X‘) { 39 if (i - 1 >= 0 && s[i-1] == ‘I‘) { 40 result += 8; 41 } 42 else { 43 result += 10; 44 } 45 } 46 if (s[i] == ‘V‘) { 47 if (i - 1 >= 0 && s[i-1] == ‘I‘) { 48 result += 3; 49 } 50 else { 51 result += 5; 52 } 53 } 54 if (s[i] == ‘I‘){ 55 result += 1; 56 } 57 } 58 return result; 59 } 60 };
时间: 2024-10-10 23:46:55