【新手上路】LeetCode刷题之“罗马数字转整数”

【新手上路】LeetCode刷题之“罗马数字转整数”

这还是一道简单题,但是如果想不到相邻字符串之间的关系,就很难有思路。

例:‘IV’对应4,‘VI’对应5;‘IX’对应9,‘XI’对应11。那么如果一个字符对应的数字比它下一位字符对应的数字大,那么我们就应该加上该字符对应的数字,反之就要减去。

#include <string.h>   //稳妥起见写上字符串库
int Judge(char x)   //对应的表函数
{
    switch(x)
    {
        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就会退出,无需break
    }
    return 0;   //象征性地写一写否则会报错
}

int romanToInt(char * s){
    int len = strlen(s);
    int result = 0;
    for(int i=0;i<len;i++)
    {
        if(i<len-1&&Judge(s[i])<Judge(s[i+1])) result -= Judge(s[i]); 
        //if的前一个条件可以有效避免索引越界,后一个则是判断是否后字符更大
        else result += Judge(s[i]);
        //其它情况下加起来就好,最后一个字符也是加
    }
    return result;
}

 【新手上路】LeetCode刷题之“罗马数字转整数”

 

class Solution:
    def romanToInt(self, s: str) -> int:
        dic = { 'I':1,      #一个映射字典
                'V':5, 
                'X':10, 
                'L':50,
                'C':100, 
                'D':500, 
                'M':1000
                }        
        result = 0        #实现方法和c语言相同
        for i in range(len(s)):            
            if i<len(s)-1 and dic[s[i]] < dic[s[i+1]]:                
                result -= dic[s[i]]
            else:
                result += dic[s[i]]
        return result

 【新手上路】LeetCode刷题之“罗马数字转整数”

 

 

上一篇:[案例2-4]为新员工分配部门


下一篇:分支与循环