[Leetcode] Roman to integer 罗马数字转成整数

Posted 王大咩的图书馆

tags:

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

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

思路:有关罗马数字的相关知识可见博客Integer to roman。从左往右遍历字符串,比较当前为和下一位的值,若是当前数字比下一位大,或者当当前数字为最后时,则加上当前数字,否则减去当前数字。这就遇到一个问题,罗马数字的字符串不是按26个字母顺序来的,如何确定大小。解决办法一:写一个函数,将罗马数字转换成整数,然后进行比较;解法二,可以使用map数据结构,将罗马数字的字母转换成对应的整数值。

方法一的代码如下:

 1 class Solution {
 2 public:
 3     int romanToInt(string s) 
 4     {
 5         int res=0;    //记得初始化
 6         for(int i=0;i<s.size();++i)
 7         {
 8             if(i==s.size()-1||strToNum(s[i])>=strToNum(s[i+1]))
 9                 res+=strToNum(s[i]);
10             else
11                 res-=strToNum(s[i]);
12         }   
13         return res;
14     }
15 
16     int strToNum(const char c)
17     {
18         int num=0;
19         switch(c)
20         {
21             case \'M\':
22                 num=1000;
23                 break;
24             case \'D\':
25                 num=500;
26                 break;
27             case \'C\':
28                 num=100;
29                 break;
30             case \'L\':
31                 num=50;
32                 break;
33             case \'X\':
34                 num=10;
35                 break;
36             case \'V\':
37                 num=5;
38                 break;
39             case \'I\':
40                 num=1;
41                 break;
42             default:
43                 num=0;
44         }
45         return num;
46     }
47 };

 

方法二:

 1 class Solution {
 2 public:
 3     int romanToInt(string s) {
 4         int res = 0;
 5         unordered_map<char, int> m{{\'I\', 1}, {\'V\', 5}, {\'X\', 10}, {\'L\', 50}, {\'C\', 100}, {\'D\', 500}, {\'M\', 1000}};
 6         for (int i = 0; i < s.size(); ++i) 
 7         {
 8             
 9             if (i == s.size() - 1 || m[s[i]] >= m[s[i+1]]) 
10                 res += m[s[i]];
11             else 
12                 res -= m[s[i]];
13         }
14         return res;
15     }
16 };

以上是关于[Leetcode] Roman to integer 罗马数字转成整数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:Integer to Roman

LeetCode 13. Roman to Integer

LeetCode:Roman to Integer

LeetCode-Integer to Roman

#Leetcode# 13. Roman to Integer

[leetcode] 13. Roman to Integer