每日一道力扣题Day03:罗马数字转整数

哈喽朋友们!欢迎收看今日的小李力扣题方法分享 今天我们来讨论“罗马数字转整数”的问题

方法一:逐字符分析

1、方法思路:通过if-else嵌套实现直观的计算,先写出I X C在特殊情况下的计算方法,然后是正

常情况下这三种字母的计算方法 最后写出其他字母的计算方法 

2、优缺点分析:不涉及什么复杂的函数和算法 简单直观 但代码较冗长 内存占用较大

下面演示C++的该方法代码~

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

方法二:映射法

1、思路介绍:通过映射给出每个罗马数字对应的值 再按罗马数的计算规则计算

2、相关语法:

①Python中的字典:

通过键值对存储数据 键必须唯一 值可以重复;通过键访问值 查找速度快;

使用场景:快速寻找键的对应值 构建映射关系(将一种数据格式转换为另一种)

②为了区分 介绍一下元组:

元组通过索引存储元素 元素不可修改 元素可以重复;通过索引来访问元素;

③def romanToInt(self, s:str) -> int:   self当前对象实例、s:str参数s是字符串类型、->int返回值类型

是整数

④python中的len()方法用于获取字符串长度、列表 元组等的元素个数

⑤enumerate()函数用于将一个可遍历的数据对象组合为一个索引序列 同时给出数据和下标

3、优缺点分析:速度快 代码简洁

下面是python的代码演示~

class Solution:
    # 定义一个字典 将罗马数字映射对应的整数值
    SYMBOL_VALUES = {
        'I': 1,
        'V': 5,
        'X': 10,
        'L': 50,
        'C': 100,
        'D': 500,
        'M': 1000,
    }

    def romanToInt(self, s: str) -> int:
        ans = 0
        n = len(s) # 获取字符串s的长度
        for i, ch in enumerate(s): # i表示索引 ch表示当前遍历到的字符
            value = Solution.SYMBOL_VALUES[ch] #获取到字符ch 赋值给value
            if i < n - 1 and value < Solution.SYMBOL_VALUES[s[i + 1]]:
                ans -= value
            else:
                ans += value
        return ans
        # 按照罗马数的逻辑 数值更大的在前面 特殊情况就是要把小数值放前面的情况 比如IV表示4
        # 基于这种情况写出遍历算法 如果当前遍历到的值小于后面的值 要把它减掉 如IV=4=-1+5
        

好的朋友们 今天的分享就到这里啦~ 希望能帮到大家~

如果有什么新的想法 也欢迎大家的点赞 评论和收藏~

下期同一时间 我们不见不散~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值