leetcode13——Roman to Integer

题目大意:将罗马数字字符串转换成整数

分析:

方法一:最简单的思路。switch case从左到右依次判断字符,将当前tmp加入ans。

方法二:转换问题本质。原题=>当左边字母<右边字母,就做减法,否则就做加法。

代码:

方法一:

class Solution {
public:
    int romanToInt(string s) {
        int ans = 0;
        int index = 0;
        while(index < s.size()) {
            int tmp = 0;
            switch(s[index]) {
                case 'I':
                    if (s[index + 1] == 'V') {
                        tmp = 4;
                        index++;
                    } else if (s[index + 1] == 'X') {
                        tmp = 9;
                        index++;
                    } else {
                        tmp = 1;
                    }
                    break;
                case 'V':
                    tmp = 5;
                    break;
                case 'X':
                    if (s[index + 1] == 'L') {
                        tmp = 40;
                        index++;
                    } else if (s[index + 1] == 'C') {
                        tmp = 90;
                        index++;
                    } else {
                        tmp = 10;
                    }
                    break;
                case 'L':
                    tmp = 50;
                    break;
                case 'C':
                    if (s[index + 1] == 'D') {
                        tmp = 400;
                        index++;
                    } else if (s[index + 1] == 'M') {
                        tmp = 900;
                        index++;
                    } else {
                        tmp = 100;
                    }
                    break;
                case 'D':
                    tmp = 500;
                    break;
                case 'M':
                    tmp = 1000;
                    break;
            }
            ans += tmp;
            index++;
        }
        return ans;
    }
};

方法二:

class Solution {
public:
    int romanToInt(string s) {
        int ans = 0;
        for (int i = 0;i < s.size();i++) {
            int l = getValue(s[i]), r = getValue(s[i + 1]);
            if (l >= r) ans += l;
            else ans -= l;
        }
        return ans;
    }
    int getValue(char c) {
        switch(c) {
            case 'I': return 1;
            case 'V': return 5;
            case 'X': return 10;
            case 'L': return 50;
            case 'C': return 100;
            case 'D': return 500;
            case 'M': return 1000;
            default: return 0;
        }    
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值