1. 程式人生 > 其它 >LeetCode 0013 Roman to Integer

LeetCode 0013 Roman to Integer

原題傳送門

1. 題目描述

2. Solution 1

1、思路分析
以CM = 900為例
策略: 從右往左遍歷,M = 1000, C = 100, 若出現逆序,則作差, CM = 1000 - 100 = 900.
2、程式碼實現

package Q0099.Q0013RomanToInteger;

/*
    以CM = 900為例
    策略: 從右往左遍歷,M = 1000, C = 100, 若出現逆序,則作差, CM = 1000 - 100 = 900.
 */
public class Solution {

    public int romanToInt(String s) {
        int res = 0;
        int pre = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            int cur = toNumber(s.charAt(i));
            if (cur >= pre) {
                res += cur;
            } else {
                res -= cur;
            }
            pre = cur;
        }
        return res;
    }

    private int toNumber(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;
            default:
                return 0;
        }
    }
}

3、複雜度分析
時間複雜度: O(n)
空間複雜度: O(1)