LeetCode上Roman to Integer的C++代码

首先我们需要了解罗马数字的表示方法,才能够设计罗马数字转化为整数的算法。罗马数字介绍可以详见百度百科或者维基百科等等。

可以简化如下

IVXLCDM
1510501005001000

根据罗马数字表示规则,我们可以初始化一个couter,然后一遍遍历,得出答案

代码如下

class Solution {
public:
    int romanToInt(string s) {
		int sSize = s.size();
		int couter = 0;
		int i;
		string temp;
		for(i = 0;i < sSize;i ++){
            if(s.substr(i,1) == "I"){
                if(s.substr(i+1, 1) == "I" || (i+1) == sSize)
                    couter ++;
                else
                    couter --;
            }
            else if(s.substr(i, 1) == "V")
                couter += 5;
            else if(s.substr(i, 1) == "X"){
                if(s.substr(i+1, 1) == "L" || s.substr(i+1, 1) == "C")
                    couter -= 10;
                else
                    couter += 10;
            }
            else if(s.substr(i, 1) == "L")
                couter += 50;
            else if(s.substr(i, 1) == "C"){
				if(s.substr(i+1,1) == "D" || s.substr(i+1,1) == "M")
					couter -= 100;
				else
					couter += 100;
            }
            else if(s.substr(i, 1) == "D")
                couter += 500;
            else if(s.substr(i, 1) == "M")
                couter += 1000;
		}
		return couter;
    }
};

本来想用swich case语句,这样思想是相同的,代码量可以少一点。但在C++里面,switch语句,后面不能用string类型的变量,但可以通过hash表来解决,我就比较暴力的把switch写成了if else。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值