您的位置:首页 > 编程语言 > C语言/C++

Leetcode -- Roman to Integer

2015-08-08 11:57 239 查看
题目:

Given a roman numeral, convert it to an integer.

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

罗马数字:

‘I’ -- 1, ‘V’ -- 5, ‘X’ -- 10, ‘L‘ -- 50, ’C‘ -- 100, ’D‘ -- 500, ’M‘ -- 1000 。 其中,IV表示4, VI表示6

思路:

采用map方式,建立罗马char与数字的映射。

值得注意的是,在罗马数字里,IV表示4, VI表示6。因此要从后向前遍历,当前一个数比后一个数小,应该在总值上,减去这个值。e.g IV中,V表示5. I表示1. 因为I在V的前面,所以实际表示的数是4.

代码(C++):

int romanToInt(string s) {

        map<char, int> map1;

        map1['I'] = 1;

        map1['V'] = 5;

        map1['X'] = 10;

        map1['L'] = 50;

        map1['C'] = 100;

        map1['D'] = 500;

        map1['M'] = 1000;    

        int len = s.length();

        int num = 0;

        int n;

        for(int i =  len -1; i>=0; i--)

        {

            n = map1[s[i]];

            if(i < len -1 && n < map1[s[i+1]])

            {

                num = num - n;

            }

            else

            {

                num = num + n;

            }

        }

        return num;

    }

PS:C++语法都不懂,用C++刷题,简直是自虐啊!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息