LeetCode:罗马数字转整数13

Posted 子烁爱学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:罗马数字转整数13相关的知识,希望对你有一定的参考价值。

LeetCode:罗马数字转整数【13】

题目描述

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

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

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

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

示例 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.

题目分析

  刷题贵在坚持,希望自己可以保持刷题,不要成为常立志之人,hiahia。

  通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,比如IV是4,而不用IIII。如果不存在特例的话,我们就从左往右依次加起来即可,我们处理的就是这种特例的情况。

  

  我们每次与前一个元素比,如果某元素大于前一个元素,那一定时出现了4,9,40..这种数字,要想得到这个数值首先是右边减去左边,比如CM(900=1000-100),但是图中减去的却是2倍的C,为什么呢?每次与前一个元素比,那么当我们到达CM的C时,由于C左边是M,那么肯定就要累加C,后面M的左边时C,此时要进行减法,累加(C-M),这是会多计算一个C,所以要去掉多加的一个C。

Java题解

class Solution {
    public int romanToInt(String s) {
        if(s==null||s.length()==0)
            return 0;
        int res = toNumber(s.charAt(0));
        for(int j=1;j<s.length();j++)
        {
            if(toNumber(s.charAt(j))>toNumber(s.charAt(j-1)))
                res=res+(toNumber(s.charAt(j))-2*toNumber(s.charAt(j-1)));
            else
                res=res+(toNumber(s.charAt(j)));
        }
        return res;
    }
    
    public int toNumber(char c)
    {
        int res = 0;
        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;
        }
        return res;
    }
}

  

以上是关于LeetCode:罗马数字转整数13的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 13 罗马数字转整数[找规律 多条件判断] HERODING的LeetCode之路

LeetCode刷题13-简单-罗马数字转整数

LeetCode刷题13-简单-罗马数字转整数

LeetCode 13. 罗马数字转整数 java 两种解法

LeetCode 13. 罗马数字转整数 java 两种解法

LeetCode13.罗马数字转整数(Python3)