码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode:Roman to Integer

时间:2014-11-30 00:49:06      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:leetcode   map   

一、     题目

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

二、     分析

前面的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;
    }
};


 

leetcode:Roman to Integer

标签:leetcode   map   

原文地址:http://blog.csdn.net/zzucsliang/article/details/41605193

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!