罗马数字转整数

题目链接

罗马数字转整数

题目描述

罗马数字转整数_第1张图片
罗马数字转整数_第2张图片

注意点

  • 1 <= s.length <= 15
  • s 仅含字符 (‘I’, ‘V’, ‘X’, ‘L’, ‘C’, ‘D’, ‘M’)
  • 题目数据保证 s 是一个有效的罗马数字

解答思路

  • 遍历整个字符串,根据当前字符的罗马值推出对应的整数,但是要注意几种特殊情况:
    • I 放在 V (5) 和 X (10) 的左边,来表示 4 和 9
    • X 放在 L (50) 和 C (100) 的左边,来表示 40 和 90
    • C 放在 D (500) 和 M (1000) 的左边,来表示 400 和 900

代码

class Solution {
    public int romanToInt(String s) {
        int res = 0;
        int n = s.length();
        for (int i = 0; i < n; i++) {
            switch(s.charAt(i)) {
                case 'I':
                    if (i + 1 < n && (s.charAt(i + 1) == 'V' || s.charAt(i + 1) == 'X')) {
                        res -= 1;
                    } else {
                        res += 1;
                    }
                    break;
                case 'V':
                    res += 5;
                    break;
                case 'X':
                    if (i + 1 < n && (s.charAt(i + 1) == 'L' || s.charAt(i + 1) == 'C')) {
                        res -= 10;
                    } else {
                        res += 10;
                    }
                    break;
                case 'L':
                    res += 50;
                    break;
                case 'C':
                    if (i + 1 < n && (s.charAt(i + 1) == 'D' || s.charAt(i + 1) == 'M')) {
                        res -= 100;
                    } else {
                        res += 100;
                    }
                    break;
                case 'D':
                    res += 500;
                    break;
                case 'M':
                    res += 1000;
                    break;
                default:
                    break;
            }
        }
        return res;
    }
}

关键点

你可能感兴趣的:(算法,算法,leetcode,java,数据结构)