代码重构: leetcode 13. 罗马数字转整数

278 阅读1分钟

13. 罗马数字转整数

题目意思也很明确,就是一个简单模拟,需要注意的点是:

  1. 当I、X、C出现时候,多一个判断,如果后面比之前大,那么是减,否则是加
  2. 如何把代码写好看了,尽量把预处理函数提到函数外,这样使得主功能函数是模块化的,有助于理解和书写。
  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;
    }