[LeetCode]Roman to Integer
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]Roman to Integer相关的知识,希望对你有一定的参考价值。
题目
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Input is guaranteed to be within the range from 1 to 3999.
思路
首先,学习一下罗马数字,参考罗马数字
罗马数字是最古老的数字表示方式,比阿拉伯数组早2000多年,起源于罗马
罗马数字有如下符号:
基本字符 | I | V | X | L | C | D | M |
对应阿拉伯数字 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
计数规则:
- 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
- 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
- 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
- 正常使用时,连续的数字重复不得超过三次
- 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则)
其次,罗马数字转阿拉伯数字规则(仅限于3999以内):
从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数
js代码:
var romanToInt = function(s) { var array=[]; for(var i=0;i<s.length;i++){ var word=s.substring(i,i+1); switch (word){ case "I": array[i]=1; break; case "V": array[i]=5; break; case "X": array[i]=10; break; case "L": array[i]=50; break; case "C": array[i]=100; break; case "D": array[i]=500; break; case "M": array[i]=1000; break; } } var result=array[0]; for(var j=0;j<(array.length-1);j++){ if(array[j+1]>array[j]){ result+=(array[j+1]-array[j]*2) }else{ result+=array[j+1]; } } return result; };
以上是关于[LeetCode]Roman to Integer的主要内容,如果未能解决你的问题,请参考以下文章