leetcode13 罗马数字转整数

题目大意

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

结题思路

根据题目要求可知,传入的罗马数字均是有效的,因此不需要考虑无效性检查。
分析规则可知,当左边的数字大于等于右边数字的时候,二者是相加的关系,例如"VI"=5+1, “II”=1+1;当左边数字小于右边数字的时候,二者是相减关系,例如"IV"=5-1= -1+5。
根据上述分析,若i位置的后一个位置i+1位置有效且数字大于i位置的数字,则需要减掉i位置的数字,反之则加上i位置的数字。

class Solution
{
public:
	int romanToInt(string s) 
	{	//便于查询每个字符对应的数字
		map<char, int> m = {{ 'I',1 },{ 'V',5 },{ 'X',10 },{ 'L',50 },{ 'C',100 },{ 'D',500 },{ 'M',1000 } };
		int ans = 0;
		int length = s.size();
		for (int i = 0; i < length; i++)
		{	//如果i位置后面还有元素,且i+1位置的数字大于i位置的数字,则需要减掉i位置的数字
			if (i < length - 1 && (m[s[i]] < m[s[i + 1]]))
				ans -= m[s[i]];
			else
				ans += m[s[i]];
		}
		return ans;
	}
};

你可能感兴趣的:(leetcode算法题解)