[leetcode] 13. Roman to Integer

原创 2016年06月01日 12:13:02

Given a roman numeral, convert it to an integer.

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

any of the letters representing numbers in the Roman numerical system: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1,000. In this system, a letter placed after another of greater value adds (thus XVI or xvi is 16), whereas a letter placed before another of greater value subtracts (thus XC or xc is 90).

Solution 1:

Idea: use switch flow. If current val is smaller than next val, minus current val. (36ms for 3999 cases)

class Solution {
public:
    int romanToInt(string s) {
        int num_digit = s.size();
        int ret = 0;
        int cur = 0, aft = 0;
        for(int i = 0; i<num_digit-1; i++){
            cur = characterToInt(s[i]);
            aft = characterToInt(s[i+1]);
            if (cur < aft) 
                ret -= cur;
            else
                ret += cur;
        }
        ret += characterToInt(s[num_digit-1]);
        return ret;
        
    }
    int characterToInt(char c){
        int val;
        switch (c){
            case 'I':
                val= 1;
                break;
            case 'V':
                val= 5;
                break;
            case 'X':
                val= 10;
                break;
            case 'L':
                val= 50;
                break;
            case 'C':
                val= 100;
                break;
            case 'D':
                val= 500;
                break;
            case 'M':
                val= 1000;
        }
        return val;
    }
};


Solution 2

Idea: use hash table (72ms for 3999 cases)

class Solution {
public:
    int romanToInt(string s) {
        unordered_map<char,int> hs;
        hs['M'] = 1000;
        hs['D'] = 500;
        hs['C'] = 100;
        hs['L'] = 50;
        hs['X'] = 10;
        hs['V'] = 5;
        hs['I'] = 1;
        
        int ret= 0;
        for(int i=0; i<s.size()-1;i++){
            int val = hs[s[i]];
            int aft = hs[s[i+1]];
            if(val<aft)
                ret-= val;
            else
                ret+= val;
        }
        ret+= hs[s[s.size()-1]];
        return ret;
        
    }
};



版权声明:本文为博主原创文章,未经博主允许不得转载。

[leetcode 13] Roman to Integer

题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the ra...

LeetCode_Easy心得:13. Roman to Integer (C语言)

13. Roman to Integer
  • hhhhhyb
  • hhhhhyb
  • 2017年07月21日 18:59
  • 145

【leetcode c++】13 Roman to Integer

题目 Given a roman numeral, convert it to aninteger. Input is guaranteed to be within the rangefrom 1 ...
  • hqq39
  • hqq39
  • 2015年06月12日 12:36
  • 487

【LEETCODE】13-Roman to Integer

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 ...

leetcode:13. Roman to Integer

leetcode:13. Roman to Integer 罗马数字转为整数 罗马数字有一下几种 I - 1 V - 5 X - 10 L - 50 C - 100 D - 500 M - 1000 ...

LeetCode之13_Integer to Roman

题目原文: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range...

LeetCode 13. Roman to Integer 解题报告

LeetCode 13. Roman to Integer 解题报告

leetcode No13. Roman to Integer

前言: 先说点背景吧,这题我一直放着没做,因为我不知道Roman数是怎么计数的呀,然后最近在看《数学之美》(特别有意思的书,第一次觉得数学还挺有意思的)罗马人也是用不同的符号代表数的不同量级。 S...

Leetcode_13_Roman to Integer

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41486885 通过本文你可能学到的知识如下: (1...

[LeetCode]--13. Roman to Integer

Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode] 13. Roman to Integer
举报原因:
原因补充:

(最多只允许输入30个字)