leetcode 13 Roman to Integer (罗马数转换成整数)

题目要求

将罗马数字转换为整数,其中罗马数字有7种“Ⅰ,V, X, L, C, D, M”,含义属下表所示:
罗马数字对照表
Ⅱ: 表示两个Ⅰ相加(1+1=2)
XⅡ: 表示X 和Ⅱ相加(10+2 = 12)

需要注意的是!!!
罗马数字在书写时遵循着从左到右是数值递增(就是右边的数会比左边的大,如XV)的顺序,然而有一些情况是左边的数会小于右边的数,如 ,那么这时不再用相加去计算,而是用减法,即 V-Ⅰ = 5-1=4.
在罗马数字中共有六种特殊情况,具体内容看一下这个规则:
准则
(1)当Ⅰ在V,X左边时,分别表示4(Ⅳ),9(Ⅸ)
(2)当 X 在L,C左边时,分别表示40(XL),90(XC)
(3)当 C在D,M左边时,分别表示400(CD),900(CM)

输入实例

Input :“Ⅲ”
Output:3

Input :“Ⅳ”
Output:4

Input :"Ⅸ“
Output:9

Input: “LVIII”
Output: 58

Input: “MCMXCIV”
Output: 1994

思路 :

我们对输入的字符串进行遍历,看当前遍历的字符属于Ⅰ,V, X, L, C, D, M,那类,根据类别找到其对应的值即可。需要处理的特殊情况有上面规则中出现的六种,我们只需要在判断类别后,再对是否属于特殊情况进行判断即可,所以我们选用switch进行操作。

主要代码 ( C++ ):

// leetcode 013
// roman to Integer
class Solution{
class Solution{
public:
	int romanToInt(string s){
		int sum = 0;
		for(int i=0;i<s.size();i++){
			switch(s[i]){
				case 'M':sum+=1000; break;
				case 'D':sum+=500;break;
				case 'C':
					//一定要用==去判断,
					//!=判断条件为真就执行的话会报错。
					if(s[i+1] =='M' || s[i+1] == 'D') sum-=100; 				
					else sum+=100;
					break;
				case 'L':sum+=50;break;
				case 'X':
					if(s[i+1] =='C' || s[i+1] == 'L') sum-=10;
					else sum+=10;
					break;
				case 'V':sum+=5; break;
				case'I':
					if(s[i+1] =='V' || s[i+1] == 'X') sum-=1;
					else sum+=1;
					break;
			}
			}
			return sum;
	}
};

原题链接:https://leetcode.com/problems/roman-to-integer/

猜你喜欢

转载自blog.csdn.net/qq_37466121/article/details/85011916