for (inti=0; i < s.length(); i++) { if (s.charAt(i) == 'I') { // I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 if (i + 1 < s.length() && s.charAt(i + 1) == 'V') { res += map.get('V') - map.get('I'); i++; } elseif (i + 1 < s.length() && s.charAt(i + 1) == 'X') { res += map.get('X') - map.get('I'); i++; } else { res += map.get('I'); } } elseif (s.charAt(i) == 'V') { res += map.get('V'); } elseif (s.charAt(i) == 'X') { // X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 if (i + 1 < s.length() && s.charAt(i + 1) == 'L') { res += map.get('L') - map.get('X'); i++; } elseif (i + 1 < s.length() && s.charAt(i + 1) == 'C') { res += map.get('C') - map.get('X'); i++; } else { res += map.get('X'); } } elseif (s.charAt(i) == 'L') { res += map.get('L'); } elseif (s.charAt(i) == 'C') { // C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 if (i + 1 < s.length() && s.charAt(i + 1) == 'D') { res += map.get('D') - map.get('C'); i++; } elseif (i + 1 < s.length() && s.charAt(i + 1) == 'M') { res += map.get('M') - map.get('C'); i++; } else { res += map.get('C'); } } elseif (s.charAt(i) == 'D') { res += map.get('D'); } else { res += map.get('M'); } }
return res; } }
执行结果:
代码较为繁琐且执行效率并不高!
更好的方法:
把一个小值放在大值的左边,就是做减法,否则为加法。
![Screen Shot 2020-02-17 at 21.14.47.png](【数据结构与算法】LeetCode:day5/9d092fd44be4a809487a326dd6e9adcdddb1b27b6f5ec02ce60651745ff43528-Screen Shot 2020-02-17 at 21.14.47.png)