0013. Roman to Integer

0013. Roman to Integer #

题目 #

  • 罗马数字包含七种字符: IVXLCDM

  • 字符 数值
    I 1
    V 5
    X 10
    L 50
    C 100
    D 500
    M 1000
  • 例如, 罗马数字 2 写做 II12 写做 XII27 写做 XXVII

  • 罗马数字中小数字通常位于大数字的右侧,但存在以下六种特例

    • I 可以放在 V (5)X (10) 的左边,来表示 49
    • X 可以放在 L (50)C (100) 的左边,来表示 4090
    • C 可以放在 D (500)M (1000) 的左边,来表示 400900
  • 给定一个罗马数字,将其转换为整数。

思路 #

模拟 #

代码 #

模拟 #

class Solution {
    public int romanToInt(String s) {
        int ans = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == 'V') ans += 5;
            else if (s.charAt(i) == 'L') ans += 50;
            else if (s.charAt(i) == 'D') ans += 500;
            else if (s.charAt(i) == 'M') ans += 1000;
            else if (s.charAt(i) == 'I') {
                if (i + 1 < s.length() && s.charAt(i + 1) == 'V') { ans += 4; i += 1; }
                else if (i + 1 < s.length() && s.charAt(i + 1) == 'X') { ans += 9; i += 1; }
                else ans += 1;
            }
            else if (s.charAt(i) == 'X') {
                if (i + 1 < s.length() && s.charAt(i + 1) == 'L') { ans += 40; i += 1; }
                else if (i + 1 < s.length() && s.charAt(i + 1) == 'C') { ans += 90; i += 1; }
                else ans += 10;
            }
            else if (s.charAt(i) == 'C') {
                if (i + 1 < s.length() && s.charAt(i + 1) == 'D') { ans += 400; i += 1; }
                else if (i + 1 < s.length() && s.charAt(i + 1) == 'M') { ans += 900; i += 1; }
                else ans += 100;
            }
        }
        return ans;
    }
}