leetcode(5)之Roman to Integer 将罗马数字转换成数字

题目描述 

 题目要点

1,相同的数字连写,表示把这些数字加起来的效果

2,如果左边的数字比右边的数字小,那么得到的就是左边的数字减去右边的数字的结果

3,如果左边的数字比右边的数字大,那么得到的就是两者相加的结果

解法一

思路:遍历整个罗马字符串,如果前一个字符表示的数值比后一个字符表示的数值小,那么就在结果变量中减去小的这个字符代表的数值,否者就加上这个字符代表的数值

代码:

/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {
    var I=1,V=5,X=10,L=50,C=100,D=500,M=1000;
    var count=0;
    for(var i=0;i<s.length;i++){
        if(eval(s[i])<eval(s[i+1])){
            count-=eval(s[i]);
        }
        else{
            count+=eval(s[i]);
        }
    }
    return count;
};

解法二

思路:将罗马字符与之相对应代表的数值存到一个对象中去,然后再遍历这个罗马字符串,每次从尾部开始用s.charAt(i)取出字符串中的一个,然后把它当作对象的属性得出该字符代表的数值,把最后一个字符代表的数值直接存入结果变量中,再判断如果前一个数比后一个大的话,就加上它,否者就减去它

代码:

/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {  
    var result = 0;
	var map = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000};
	for(var i = s.length-1; i >= 0; i--){
		var roman_num = s.charAt(i);
		var val = map[roman_num];
		if(i < s.length-1){
		   var before = map[s.charAt(i+1)];
		   if(val < before){
		   	  val = 0- val;
		   }
		}
	    result = result+val;
	}
	return result;
};

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值