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

Roman to Integer ——解题报告

时间:2015-05-06 23:07:28      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:leetcode   string   roman   


    【题目】

    Given a roman numeral, convert it to an integer.

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


    【分析】

    这个和上篇博文中把数字转换为罗马数字正好相反,逻辑过程有点儿复杂。

    其实解法来源于对罗马数字(字符串)的观察,在解析这个字符串的时候,我们可以分成两种情况:

1)如果former大于等于current,那么结果可以直接加上current的数值;

2)如果former较小,那么我们需要用current - former*2. 这里为什么需要减去2倍的former,因为former在前面一定是先加上过一次,例如:XIV, 过程是10+1+5-2*1=14,看到了吧,1在前面一定是已经加上了一次了。


   【代码】


class Solution {
public:
    int romanToInt(string s) {
        int res = 0; 
        int len = s.length();
        res += convert(s[0]);
        
        for(int i = 1; i < len; i++)
        {
            int current = convert(s[i]); 
            int former = convert(s[i - 1]); 
            if(former >= current)  // the former one is larger than or equalling to the later one
            {
                res += current;
            }
            else
            {
                res += current - 2*former;
            }
        }
        return res;
    }
    
    int convert(char c)
    {
        switch(c)
        {
            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;
        
    }
};








Roman to Integer ——解题报告

标签:leetcode   string   roman   

原文地址:http://blog.csdn.net/puqutogether/article/details/45540425

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