您的位置:首页 > Web前端 > JavaScript

Roman to Integer-LeetCode JavaScript

2018-01-25 11:36 295 查看
今天很顺利,之前看过这题猛地一想罗马数字,一堆鬼符号(不知道只是英文字符),复杂的规则(并不了解规则)。今又看到这道题,提交成功率蛮高,再加上刚刚啃了一上午红宝书,决定硬刚,快放假了,坐不住了。。。

首先百度了罗马数字,发现是几个大写英文数字的组合。百度百科截取如下

罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:

相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;

小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;

小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;

在一个数的上面画一条横线,表示这个数增值 1,000 倍

看了最后一条规则回去读了题i,应该不会出现这种情况。
既然有加有减就得比较。比较什么呢?罗马数的每一位。有了之前String类型可以直接通过索引访问每一位,加上想起了强大的eval(),ok大概能出来了。
上述规则总结一句话就是数比右边的大则减,比右边小则加,从左从右开始不计较。
源码:
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
var I=1,X=10,C=100,M=1000,V=5,L=50,D=500;
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;
};
由于第一次run就一致,第一次submit就accept,去百度了一下解法,发现另一种方法是创建一个object,大写字母为索引,值为对应的数值,和我用的eval效果一样(我的更简洁嘿嘿)。这位小哥还是从右到左遍历的,有点阁僚,emmmm于是我有点膨胀了,加油~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: