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大概能出来了。
上述规则总结一句话就是数比右边的大则减,比右边小则加,从左从右开始不计较。
源码:
首先百度了罗马数字,发现是几个大写英文数字的组合。百度百科截取如下
罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(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于是我有点膨胀了,加油~
相关文章推荐
- Leetcode 13 Roman to Integer 字符串处理+STL
- 12. Integer to Roman
- [LeetCode]Integer to Roman
- Integer to Roman
- LeetCode之Roman to Integer
- 12 Integer to Roman
- 四、[LeetCode OJ]Integer to Roman
- LeetCode - Roman to Integer
- leetcode - Roman to Integer 与 Integer to Roman
- leetcode:Integer to Roman
- Leetcode: Integer to Roman
- LeetCode : Roman to Integer
- Roman to Integer
- LeetCode 12 Integer to Roman (整数转罗马数字)
- Integer to Roman问题及解法
- 【Leetcode】【python】Integer to Roman
- LeetCode Roman to Integer
- Integer to Roman
- LeetCode Integer to Roman
- roman-to-integer