LeetCode刷题笔记-13.罗马数字转整数

LeetCode刷题笔记-13.罗马数字转整数

  • C代码
    • 思路
    • 结果
  • 题目

C代码

#define OFFSET(a) (a -'A')
int map[] = {
    [OFFSET('I')] = 1,
    [OFFSET('V')] = 5,
    [OFFSET('X')] = 10,
    [OFFSET('L')] = 50,
    [OFFSET('C')] = 100,
    [OFFSET('D')] = 500,
    [OFFSET('M')] = 1000
};
int romanToInt(char * s){
    int ans = 0;

    while(s != NULL && *s != '\0') {
        if((s+1) != NULL && *(s+1) != '\0') {
            if (map[OFFSET(*s)] < map[OFFSET(*(s+1))]) {
                ans -= map[OFFSET(*s)];
                s++;
                continue;
            }
        }
        ans += map[OFFSET(*s)];
        s++;
    }
    return ans;
}

思路

  1. 下一个子串比当前子串大,即当前为待减去的数;
  2. 建立映射表;

结果

LeetCode刷题笔记-13.罗马数字转整数_第1张图片

题目

LeetCode刷题笔记-13.罗马数字转整数_第2张图片

你可能感兴趣的:(算法刷题,c语言,leetcode,算法)