13. 罗马数字转整数
题目意思也很明确,就是一个简单模拟,需要注意的点是:
- 当I、X、C出现时候,多一个判断,如果后面比之前大,那么是减,否则是加
- 如何把代码写好看了,尽量把预处理函数提到函数外,这样使得主功能函数是模块化的,有助于理解和书写。
public int romanToInt(String s) {
int[] ints = preSovle();
int ans = 0;
for (int i = 0; i < s.length(); i++) {
int cur = s.charAt(i) - 'A';
if ((s.charAt(i) == 'I' || s.charAt(i) == 'X' || s.charAt(i) == 'C')) {
if (i < s.length() - 1 && ints[s.charAt(i + 1) - 'A'] > ints[cur]) {
ans -= ints[cur];
} else ans += ints[cur];
} else ans += ints[cur];
}
return ans;
}
private int[] preSovle() {
int[] ints = new int[26];
ints['I' - 'A'] = 1;
ints['V' - 'A'] = 5;
ints['X' - 'A'] = 10;
ints['L' - 'A'] = 50;
ints['C' - 'A'] = 100;
ints['D' - 'A'] = 500;
ints['M' - 'A'] = 1000;
return ints;
}