码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]Roman to Integer

时间:2016-12-09 00:44:36      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:思路   pre   数字   i++   pac   sub   body   tle   符号   

题目

Given a roman numeral, convert it to an integer.
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
计数规则:
  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
  2. 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
  3. 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
  4. 正常使用时,连续的数字重复不得超过三次
  5. 在一个数的上面画横线,表示这个数扩大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

标签:思路   pre   数字   i++   pac   sub   body   tle   符号   

原文地址:http://www.cnblogs.com/sakura0203/p/6146913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!