[leetcode] 13. Roman to Integer

来源:互联网 发布:数字小姐是谁 知乎 编辑:程序博客网 时间:2024/06/01 11:59

Given a roman numeral, convert it to an integer.

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

这道题是将罗马数字转化为阿拉伯数字,题目难度为Easy。

解题的关键依然在罗马数字的规律上,题目和第12题相关,不了解罗马数字规律的同学可以先看下第12题(传送门)。

从罗马数字的组合规律可以知道,如果某个数字比它右边数字小,两者组合的数字是右边数字减左边数字,如果比右边数字大,两者组合是右边数字加左边数字。这样可以通过遍历整个罗马数字字符串,比较当前位置数字和它右边数字的大小关系,如果比右边数字大,在最终结果上加当前数字,如果比右边数字小,在最终结果上减当前数字,遍历完整个字符串即可得出最终结果。具体代码:

class Solution {    int getVal(char ch) {        switch(ch) {            case 'I': return 1;            case 'V': return 5;            case 'X': return 10;            case 'L': return 50;            case 'C': return 100;            case 'D': return 500;            default:  return 1000;        }    }public:    int romanToInt(string s) {        int ret = 0;                for(int i=0; i<s.size()-1; ++i) {            if(getVal(s[i]) < getVal(s[i+1])) ret -= getVal(s[i]);            else ret += getVal(s[i]);        }        ret += getVal(s.back());                return ret;    }};

0 0
原创粉丝点击