题目
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Subscribe to see which companies asked this question
翻译
给定一个罗马数字,将它转换成整数。
思路
罗马数字的含义:
I->1;
V->5;
X->10;
L->50;
C->100;
D->500;
M->1000;
首先需要找出数字规律:
1.当左边位数大于右边位数时,只需要将数字相加即可;
2.若左边数字小于右边数字,则需要将数字相减。
源码
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
if(s.length==1) return toNumber(s);
var ret=toNumber(s[0]);
for(var i=1;i<s.length;i++){
if(toNumber(s[i-1])<toNumber(s[i])){
ret=ret+toNumber(s[i])-2*toNumber(s[i-1]);
}else{
ret=ret+toNumber(s[i]);
}
}
return ret;
}
function toNumber(ch){
switch(ch){
case "I":return 1;
case "V":return 5;
case "X":return 10;
case "L":return 50;
case "C":return 100;
case "D":return 500;
case "M":return 1000;
}
return 0;
}