Leetcode算法课程第七周作业

来源:互联网 发布:java字符串金额格式化 编辑:程序博客网 时间:2024/06/06 20:00

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

原创粉丝点击