[LeetCode OJ] Roman to Integer

本文介绍了一种将罗马数字转换为整数的算法实现,通过使用C++并结合哈希映射来处理输入的罗马数字字符串。文章详细展示了算法的具体步骤,并提供了完整的代码示例。

Given a roman numeral, convert it to an integer.

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

 

下面是百度得到的关于罗马数的解释:

 

我的代码:

 1 class Solution {
 2 public:
 3     int romanToInt(string s) {
 4         map<char,int> conversion;
 5         conversion.insert(make_pair('I',1));
 6         conversion.insert(make_pair('V',5));
 7         conversion.insert(make_pair('X',10));
 8         conversion.insert(make_pair('L',50));
 9         conversion.insert(make_pair('C',100));
10         conversion.insert(make_pair('D',500));
11         conversion.insert(make_pair('M',1000));
12         int ans=0;
13         for(unsigned i=0; i<s.size(); i++)
14         {
15             if(s[i]=='V' || s[i]=='L' || s[i]=='D') //不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目
16                 ans += conversion[s[i]];
17             else   //基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个
18             {
19                 if(i<s.size()-1 && conversion[s[i]]<conversion[s[i+1]])
20                 {
21                     ans += conversion[s[i+1]]-conversion[s[i]];
22                     i++;
23                 }
24                 else
25                     ans += conversion[s[i]];
26             }
27         }
28         return ans;
29     }
30 };

 

转载于:https://www.cnblogs.com/Marrybe/p/3847409.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值