思路
用一个池子pool
积蓄累计值
从左往右看,如果当前的数字:
- 比右边的数字大, 那么就可以把
pool
清空并把里面的值加到result
里 - 比右边的数字小,那么可以把
pool
清空并把里面的值从result
里减去 - 与右边的数字一样大,把当前数值积蓄到
pool
里
class Solution {
public int romanToInt(String s) {
int result = 0;
int pool = 0;
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//右边没有更多的字母了
if (i == s.length() - 1) {
result = result + pool + romanSymbolToInt(c);
break;
}
int currentInt = romanSymbolToInt(c);
pool += currentInt;
int nextInt = romanSymbolToInt(s.charAt(i+1));
if (currentInt < nextInt) {
result -= pool;
pool = 0;
} else if (currentInt > nextInt) {
result += pool;
pool = 0;
}
}
return result;
}
private int romanSymbolToInt(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;
}
return 0;
}
}