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

LeetCode 13. Roman to Integer

时间:2016-09-19 17:59:26      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

Given a roman numeral, convert it to an integer.

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

 

罗马数字:可以查看维基百科的定义

 

技术分享.

最大为MMMCMXCIX,我们需要注意的是9的写法是IX,4的写法是IV

这样我们遍历整个字符串后就可以得到结果,也可以将求值重新封装

成一个新的函数,因为好多部分都是重复的,下面是代码

class Solution {
public:
    int romanToInt(string s) {
        int sum = 0;
        int cnt = 0;
        int i = 0;
            if (i + cnt<s.size() && s[i] == M)
            {
                ++cnt;
                for (;s[i + cnt] == M;++cnt);
                sum += cnt * 1000;
                i += cnt;
                cnt = 0;
            }
            if (i + cnt < s.size() && s[i] == D)
            {
                ++cnt;
                for (;s[i + cnt] == C;++cnt);
                sum += (4 + cnt) * 100;
                i += cnt;
                cnt = 0;    
            }
            if (i + cnt < s.size()&&s[i] == C)
            {
                ++cnt;
                for (;s[i + cnt] == C;++cnt);
                if (1 == cnt)
                {
                    if (s[i + cnt] != M&&s[i + cnt] != D)
                    {
                        sum += 100;
                        i += cnt;
                        cnt = 0;
                    }
                    if (s[i + cnt] == M)
                    {
                        ++cnt;
                        sum += 900;
                        i += cnt;
                        cnt = 0;
                    }
                    if (s[i + cnt] == D)
                    {
                        ++cnt;
                        sum += 400;
                        i += cnt;
                        cnt = 0;
                    }
                }
                if (2 == cnt)
                {
                    sum += 200;
                    i += cnt;
                    cnt = 0;
                }
                if (3 == cnt)
                {
                    sum += 300;
                    i += cnt;
                    cnt = 0;
                }    
            }
            if (i + cnt < s.size() && s[i] == L)
            {
                ++cnt;
                for (;s[i + cnt] == X;++cnt);
                sum += (4 + cnt) * 10;
                i += cnt;
                cnt = 0;
            }
            if (i + cnt < s.size() && s[i] == X)
            {
                ++cnt;
                for (;s[i + cnt] == X;++cnt);
                if (1 == cnt)
                {
                    if (s[i + cnt] != L&&s[i + cnt] != C)
                    {
                        sum += 10;
                        i += cnt;
                        cnt = 0;
                    }
                    if (s[i + cnt] == C)
                    {
                        ++cnt;
                        sum += 90;
                        i += cnt;
                        cnt = 0;
                    }
                    if (s[i + cnt] == L)
                    {
                        ++cnt;
                        sum += 40;
                        i += cnt;
                        cnt = 0;
                    }
                }
                if (2 == cnt)
                {
                    sum += 20;
                    i += cnt;
                    cnt = 0;
                }
                if (3 == cnt)
                {
                    sum += 30;
                    i += cnt;
                    cnt = 0;
                }
            }
                if (i + cnt < s.size() && s[i] == V)
                {
                    ++cnt;
                    for (;s[i + cnt] == I;++cnt);
                    sum += (4 + cnt) * 1;
                    i += cnt;
                    cnt = 0;
                }
                if (i + cnt < s.size() && s[i] == I)
                {
                    ++cnt;
                    for (;s[i + cnt] == I;++cnt);
                    if (1 == cnt)
                    {
                        if (s[i + cnt] != V&&s[i + cnt] != X)
                        {
                            sum += 1;
                            i += cnt;
                            cnt = 0;
                        }
                        if (s[i + cnt] == X)
                        {
                            ++cnt;
                            sum += 9;
                            i += cnt;
                            cnt = 0;
                        }
                        if (s[i + cnt] == V)
                        {
                            ++cnt;
                            sum += 4;
                            i += cnt;
                            cnt = 0;
                        }
                    }
                    if (2 == cnt)
                    {
                        sum += 2;
                        i += cnt;
                        cnt = 0;
                    }
                    if (3 == cnt)
                    {
                        sum += 3;
                        i += cnt;
                        cnt = 0;
                    }
                }
            return sum;
    }
};

 

LeetCode 13. Roman to Integer

标签:

原文地址:http://www.cnblogs.com/csudanli/p/5885666.html

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