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

Leetcode_num14_Roman to Integer

时间:2014-10-10 13:32:24      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:leetcode   字符串转换   

题目:

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

题目意思很简单,即将一个罗马数字的字符串,转化为整数。

首先我们需要对罗马数字有一个基本的认识,由于题目已将数字大小限定在1~3999,所以我们只需考虑千位数即可,无需涉及数字的分段等复杂的问题。

下面简要列出罗马数字中的单位:‘I‘ 1; ‘V‘ 5; ‘X‘ 10; ‘L‘ 50 ; ‘C‘ 100; ‘D‘ 500; ‘M‘ 1000

罗马数字的大小即是将其中所包含字符所代表的的数字求和,其中数字的组合规律为: I X C 会因位置的不同而加减其值。举个栗子,IV的值为4,而VI的值为6;CD的值为400,而DC的值为600。V L D M在1~3999的范围内则不存在该问题。

最终选择了一个只需遍历一次字符串的方法,即从末尾开始遍历罗马数字字符串,若出现 I(X ,C) ,如果已遍历部分的值高于V(L, D),则在已有结果中减去I(X ,C)的值,反之,则加上。

总结一句,此题的关键在于找规律,最后上代码咯~

class Solution:
    # @return an integer
    def romanToInt(self, s):
        L=len(s)
        res=0
        for i in range(L-1,-1,-1):
            a=s[i]
            if a=='I':
                if res>=5:
                    res-=1
                else:
                    res+=1
            elif a=='V':
                res+=5
            elif a=='X':
                if res>=50:
                    res-=10
                else:
                    res+=10
            elif a=='L':
                res+=50
            elif a=='C':
                if res>=500:
                    res-=100
                else:
                    res+=100
            elif a=='D':
                res+=500
            elif a=='M':
                res+=1000
        return res


Leetcode_num14_Roman to Integer

标签:leetcode   字符串转换   

原文地址:http://blog.csdn.net/eliza1130/article/details/39958985

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