C++ 之LeetCode刷题记录(三)

😄😊😆😃😄😊😆😃

开始cpp刷题之旅,多学多练,尽力而为。

先易后难,先刷简单的。

在这里插入图片描述

13、罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

示例 1:

输入: s = “III”
输出: 3
示例 2:

输入: s = “IV”
输出: 4
示例 3:

输入: s = “IX”
输出: 9
示例 4:

输入: s = “LVIII”
输出: 58
解释: L = 50, V= 5, III = 3.
示例 5:

输入: s = “MCMXCIV”
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

方法: 倒序相加

先创建一个unordered_map,存入对应的key、value。

创建一个temp存入当前值,再判断前一个值与后一个值大小关系,如果前一个值小于后一个值,就减去前一个值,否则就加上前一个值。这样遍历即可得到正确答案。

当然其中有一些细节,三元运算符这里要使用小于做判断。是为了避免前后相等这种情况,这种情况是要判断为加的。

class Solution {
   
private:
    unordered_map<char,int> List= {
   
        {
   'I',1},
        {
   'V',5},
        {
   'X',10},
        {
   'L',50},
        {
   'C',100},
        {
   'D',500},
        {
   'M',1000}
    };

public:
    int romanToInt(string s) {
   
        int length= s.length();
        int sum=0;
        int temp=0;
        for(int i=length-1;i>=0;i--){
   
            int currNum=List[s[i]];
            currNum<temp?sum-=currNum:sum+=currNum;   这里用小于temp,是因为III这种情况,是要加的,如果使用>做判断,会报错。
            temp=currNum;
        }
        return sum;
    }
};

OK,到此结束,工作再忙,但也要坚持每天一题。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 22:44:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 22:44:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 22:44:01       82 阅读
  4. Python语言-面向对象

    2023-12-28 22:44:01       91 阅读

热门阅读

  1. 音视频编码基础知识

    2023-12-28 22:44:01       65 阅读
  2. 【DB2】Maxlocks和防止锁升级

    2023-12-28 22:44:01       57 阅读
  3. 力扣labuladong——一刷day80

    2023-12-28 22:44:01       57 阅读
  4. 面试问题整理若干

    2023-12-28 22:44:01       61 阅读
  5. 观察者(模板)的一点体会

    2023-12-28 22:44:01       50 阅读
  6. 大数据知识分享:大数据产业必知概念

    2023-12-28 22:44:01       63 阅读
  7. SQL备忘--子查询与ALL/ANY运算符

    2023-12-28 22:44:01       57 阅读
  8. 幸运树。。

    2023-12-28 22:44:01       53 阅读
  9. Oracle中varchar2和nvarchar2的区别

    2023-12-28 22:44:01       57 阅读
  10. Qt中保存和还原Widget状态的入门指南

    2023-12-28 22:44:01       68 阅读
  11. Python 虚拟环境工具及使用总结

    2023-12-28 22:44:01       49 阅读