当前位置: 代码迷 >> 综合 >> leetcode 13 Roman to Integer (罗马数转换成整数)
  详细解决方案

leetcode 13 Roman to Integer (罗马数转换成整数)

热度:20   发布时间:2023-11-17 01:28:47.0

题目要求

将罗马数字转换为整数,其中罗马数字有7种“Ⅰ,V, X, L, C, D, M”,含义属下表所示:
罗马数字对照表
Ⅱ: 表示两个Ⅰ相加(1+1=2)
XⅡ: 表示X 和Ⅱ相加(10+2 = 12)

需要注意的是!!!
罗马数字在书写时遵循着从左到右是数值递增(就是右边的数会比左边的大,如XV)的顺序,然而有一些情况是左边的数会小于右边的数,如 ,那么这时不再用相加去计算,而是用减法,即 V-Ⅰ = 5-1=4.
在罗马数字中共有六种特殊情况,具体内容看一下这个规则:
准则
(1)当Ⅰ在V,X左边时,分别表示4(Ⅳ),9(Ⅸ)
(2)当 X 在L,C左边时,分别表示40(XL),90(XC)
(3)当 C在D,M左边时,分别表示400(CD),900(CM)

输入实例

Input :“Ⅲ”
Output:3

Input :“Ⅳ”
Output:4

Input :"Ⅸ“
Output:9

Input: “LVIII”
Output: 58

Input: “MCMXCIV”
Output: 1994

思路 :

我们对输入的字符串进行遍历,看当前遍历的字符属于Ⅰ,V, X, L, C, D, M,那类,根据类别找到其对应的值即可。需要处理的特殊情况有上面规则中出现的六种,我们只需要在判断类别后,再对是否属于特殊情况进行判断即可,所以我们选用switch进行操作。

主要代码 ( C++ ):

// leetcode 013
// roman to Integer
class Solution{
    
class Solution{
    
public:int romanToInt(string s){
    int sum = 0;for(int i=0;i<s.size();i++){
    switch(s[i]){
    case 'M':sum+=1000; break;case 'D':sum+=500;break;case 'C'://一定要用==去判断,//!=判断条件为真就执行的话会报错。if(s[i+1] =='M' || s[i+1] == 'D') sum-=100; 				else sum+=100;break;case 'L':sum+=50;break;case 'X':if(s[i+1] =='C' || s[i+1] == 'L') sum-=10;else sum+=10;break;case 'V':sum+=5; break;case'I':if(s[i+1] =='V' || s[i+1] == 'X') sum-=1;else sum+=1;break;}}return sum;}
};

原题链接:https://leetcode.com/problems/roman-to-integer/

  相关解决方案