Leetcode算法课程第七周作业

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 3999.

给定一个罗马数字,把它转变成一个整型,罗马数字的范围在1到3999

题目分析

首先罗马数字有7个符号
I — 1
V — 5
X — 10
L — 50
C — 100
D — 500
M — 1000
罗马数字有两个特点
一个数字重复出现几次就是这个数的几的倍数
右加左减原则: 一个较大的数的右边放一个小的数,就是这两个数的和,否则就是两个数的差。
给定任意一个罗马数字,我们从最后一个字符开始,向左边方向依次比较当前字符和相邻字符的相对大小,如果满足右加,则result加上当前字符对应的十进制值,如果满足左减,则result减去当前值

class Solution {
public:
    int romanToInt(string s) {
        map<char, int> roman;
        roman.insert(pair<char, int>('I', 1));
        roman.insert(pair<char, int>('V', 5));
        roman.insert(pair<char, int>('X', 10));
        roman.insert(pair<char, int>('L', 50));
        roman.insert(pair<char, int>('C', 100));
        roman.insert(pair<char, int>('D', 500));
        roman.insert(pair<char, int>('M', 1000));
        int len = s.size();
        int result = roman[s[len - 1]];
        int pivot = result;
        for (int i = len - 2; i >= 0; i--) {
            int curr = roman[s[i]];
            if (curr < pivot) {  //左减
                result -= curr;
            } else {
                result += curr;
            }
            pivot = curr;
        }
        return result;
    }
};

image_1bt25eiap1890h0mse819lbvm79.png-174.9kB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值