现在的位置: 首页 > 综合 > 正文

leetcode:Roman to Integer

2019年11月04日 ⁄ 综合 ⁄ 共 561字 ⁄ 字号 评论关闭

一、     题目

将罗马数字转换成整型数字。前面已经介绍过罗马数字了这里就不赘述了。

二、     分析

前面的Integerto Roman 已经知道将整型数转换成罗马数字,方面一样我们需要一位位的确定。首先我们一个个的将字母和数字匹配对应,然后我们由以下的规则来思考:

1、重复次数:一个罗马数字重复几次,就表示这个数的几倍。

左加右减:

2、在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。

3、在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。

所以,我们在转换的时候只需要考虑到下一个字母的存在和取值,和当前的对应的值比较确定应该加或者减。


class Solution {
public:
    int romanToInt(string s) {
    	int out = 0;
	    map<char, int> stand = { 
		{ 'I', 1 }, 
		{ 'V', 5 }, 
		{ 'X', 10 }, 
		{ 'L', 50 },
		{ 'C', 100 },
		{ 'D', 500 },
		{ 'M', 1000 } };

	    for (int i = 0; i < s.size(); i++) {
		   if ((i + 1) < s.size() && stand[s[i]] < stand[s[i + 1]]) {
			   out += stand[s[i + 1]] - stand[s[i]];
			   i++;
		   }
		    else
			   out += stand[s[i]];
	    }
	return out;
    }
};

 

抱歉!评论已关闭.