Not Only Algorithm,不仅仅是算法,关注数学、算法、数据结构、程序员笔试面试以及一切涉及计算机编程之美的内容 。。
你的位置:NoAlGo博客 » 题解 » 

Leetcode Roman to Integer

Leetcode algorithms 第 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.

解答

罗马数字转换成整数,罗马数字里小数字出现在大数字左边时使用减法,出现在右边则使用加法,可以直接扫描罗马数字的每一位,如果前一位比该位小,则减去前一位的值,再加上该位减前一位的值,否则直接加上该位的值。最后的结果即为答案。

具体代码如下:

class Solution {
public:
    int r2i(char c)
    {
        if (c == 'I') return 1;
        if (c == 'V') return 5;
        if (c == 'X') return 10;
        if (c == 'L') return 50;
        if (c == 'C') return 100;
        if (c == 'D') return 500;
        if (c == 'M') return 1000;
    }
    
    int romanToInt(string s) {
        if (s.length() == 0) return 0;
        
        int ans = r2i(s[0]);
        for (int i = 1; i < s.length(); i++)
        {
            int prev = r2i(s[i-1]), cur = r2i(s[i]);
            if (prev < cur) //小数接大数
                ans = ans - prev + cur - prev;
            else
                ans = cur + ans;
        }
        return ans;
    }
};
上一篇: 下一篇:

我的博客

NoAlGo头像编程这件小事牵扯到太多的知识,很容易知其然而不知其所以然,但真正了不起的程序员对自己程序的每一个字节都了如指掌,要立足基础理论,努力提升自我的专业修养。

站内搜索

最新评论