算法每日一题20190622:罗马数字转整数

算法大约 1946 字

题目

难易程度:【简单】

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符数值
I1
V5
X10
L50
C100
D500
M1000

例如, 罗马数字2写做II,即为两个并列的112写做XII,即为 X + II27写做 XXVII, 即为XX + V + II

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如4不写做IIII,而是IV。数字1在数字5的左边,所表示的数等于大数5减小数1得到的数值4。同样地,数字9表示为IX。这个特殊的规则只适用于以下六种情况:

  • I可以放在V(5) 和X(10) 的左边,来表示49
  • X可以放在L(50) 和C(100) 的左边,来表示4090。 
  • C可以放在D(500) 和M(1000) 的左边,来表示400900

示例

示例 1:

输入: "III"
输出: 3

示例 2:

输入: "IV"
输出: 4

示例 3:

输入: "IX"
输出: 9

示例 4:

输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:

输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
博主答案
class Solution {
    public int romanToInt(String s) {
        int total = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            switch (c) {
                case 'I':
                    total += 1;
                    break;
                case 'V':
                    total += 5;
                    break;
                case 'X':
                    total += 10;
                    break;
                case 'L':
                    total += 50;
                    break;
                case 'C':
                    total += 100;
                    break;
                case 'D':
                    total += 500;
                    break;
                case 'M':
                    total += 1000;
                    break;
            }

            if (i > 0) {
                if ((c == 'V' || c == 'X') && (s.charAt(i - 1) == 'I')) {
                    total -= 1 * 2;
                } else if ((c == 'L' || c == 'C') && (s.charAt(i - 1) == 'X')) {
                    total -= 10 * 2;
                } else if ((c == 'D' || c == 'M') && (s.charAt(i - 1) == 'C')) {
                    total -= 100 * 2;
                }
            }
        }
        return total;
    }
}
推荐答案

答案链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/roman-to-integer

阅读 345 · 发布于 2019-06-22

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批