Leetcode 13. Roman to Integer

题目

Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.

分析

上题说过罗马数字和整数之间的转化问题,现在反过来将罗马数字转化为阿拉伯数字时候,反过来考虑,依次匹配各个数位,之后相加得到答案。

bool equal(char *s,int i,char *a)
{
    bool ans=true;
    int j=0;
    while(a[j]!='\0')
    {
        if(s[i]=='\0'||(s[i]!='\0'&&s[i]!=a[j]))
        {
            ans=false;
            break;
        }
        j++;
        i++;
    }
    return ans;
}
int romanToInt(char* s) {
    char* c[4][10]={
            {"","I","II","III","IV","V","VI","VII","VIII","IX"},
            {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
            {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
            {"","M","MM","MMM"}
        };
        int ans=0,length=0,i=0,j=0;
        for(i=3;i>=0;i--)
        {
            if(equal(s,length,c[3][i]))
            {
                ans+=i*1000;
                length+=i;
                break;
            }
        }
        for(j=2;j>=0;j--)
        {
            for(i=9;i>0;i--)
            {
                if(equal(s,length,c[j][i]))
                {
                   // printf("%d %d %d\n",length,i,j);
                    if(j==2)ans+=i*100;
                    if(j==1)ans+=i*10;
                    if(j==0)ans+=i;
                    if(i==1||i==5)length+=1;
                    if(i==2||i==4||i==6||i==9)length+=2;
                    if(i==3||i==7)length+=3;
                    if(i==8)length+=4;
                }
            }
        }
        return ans;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容