roman-to-integer

本文介绍了一种将罗马数字转换为十进制整数的算法实现,通过使用C++编程语言,详细解释了如何处理罗马数字的特殊规则,如大数字在小数字右侧时的相减操作。

https://www.nowcoder.com/practice/817fdd12bd3341349a0079f74e692ebf?tpId=46&tqId=29165&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking

题意:就是将罗马数字转化为十进制整数

罗马数字表

字符   数值

I   1

V   5

X   10
L   50
C   100
D   500
M   1000

一般大的数字在小的左边,如果大的数字在小的右边,则数值是相减的结果

比如IV表示4,即5 - 1 = 4

class Solution {
public:
    int romanToInt(string s) {
        int len = s.length();
		if(len == 0)
			return 0;

		map<char, int>m;
		int res = 0;
		//建立映射关系
		m['I'] = 1;
		m['V'] = 5;
		m['X'] = 10;
		m['L'] = 50;
		m['C'] = 100;
		m['D'] = 500;
		m['M'] = 1000;

		for(int i = 0; i < len; )
		{
			if(i + 1 < len && m[s[i]] < m[s[i+1]])
			{
				//如果大的数字在小的右边
				res += ( m[s[i+1]] - m[s[i]] );
				i += 2;
			}
			else
			{
				res += m[s[i]];
				i++;
			}


		}
		return res;
    }
};

 

用map容器插入数据要时间,可以用switch获得 每个字符的值,更快一点点


class Solution {
public:
    int romanToInt(string s) {
        int len = s.length();
		if(len == 0)
			return 0;

		
		int res = 0;
		
	

		for(int i = 0; i < len; )
		{
			if(i + 1 < len && getValue(s[i]) < getValue(s[i+1]))
			{
				//如果大的数字在小的右边
				res += ( getValue(s[i+1]) - getValue(s[i]) );
				i += 2;
			}
			else
			{
				res += getValue(s[i]);
				i++;
			}


		}
		return res;
    }

	int getValue(char x)
	{
		switch(x){

			case 'I':
				return 1;
			case 'V':
				return 5;
			case 'X':
				return 10;
			case 'L':
				return 50;
			case 'C':
				return 100;
			case 'D':
				return 500;
			case 'M':
				return 1000;
		
		
		}
	}

};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值