leetcode算法题详解系列:13题罗马数字转整数

一、首先来看leetcode官方题解. - 力扣(LeetCode)

详细代码内容如下:

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

public:
    int romanToInt(string s) {
        int ans = 0;
        int n = s.length();
        for (int i = 0; i < n; ++i) {
            int value = symbolValues[s[i]];
            if (i < n - 1 && value < symbolValues[s[i + 1]]) {
                ans -= value;
            } else {
                ans += value;
            }
        }
        return ans;
    }
};

作者:力扣官方题解

二、根据官方题解,我们进行代码的逐行讲解。

1. 

class Solution {

首先,class Solution 定义了一个Solution类,通常在 编写算法中中,会将解决方案封装在一个类中;(类 是一种自定义的数据类型,用于封装数据和操作这些数据的函数。类定义了对象的属性(数据成员)和行为(成员函数),而对象则是类的一个实例。)

2. 

private:

private:下的成员变量和成员函数默认是私有的,不能直接在类外访问,因此这里的unordered_map 是私有成员,用于存储罗马数字符号到整数的映射。(其中分为private:类内部可以访问,类外部不能直接访问。public:类内外都可以访问。protected:类内可以访问,子类可以访问,但类外不能直接访问。)

3. 

unordered_map<char, int> symbolValues

通过unordered_map<char, int> symbolValues,定义一个哈希表(unordered_map),键(key)是字符型 char,值(value)是整数型 int。这个哈希表用于存储罗马数字符号及其对应的整数值。例如,'I' 对应1,'V' 对应5,等等。symbolValues 的作用是将所有罗马数字符号与对应的整数值进行映射。

4. 

public:
    int romanToInt(string s) {
        int ans = 0;
        int n = s.length();

上面已经说到了public后面的成员函数是公有的,即可以在类外调用。

5. 然后在public后定义了一个公有函数 romanToInt ,它接受一个 string 类型的参数 S,表示一个罗马数字字符串,返回一个 int,表示该罗马数字转换后的整数值。

6. 

int ans = 0;

随后定义了一个 int 变量 ans,用于存储最终转换的整数结果。初始值为 0。

7. 

   for (int i = 0; i < n; ++i) {
            int value = symbolValues[s[i]];

使用一个 for 循环遍历字符串 s 中的每个字符。i 从 0 开始,直到 n - 1,表示每个字符的位置。然后通过 symbolValues[s[i]]获取当前字符 s[i] 对应的整数值,并存储在 value 变量中。

8. 

 if (i < n - 1 && value < symbolValues[s[i + 1]]) {
                ans -= value;
            } else {
                ans += value;
            }

使用if (i < n - 1 && value < symbolValues[s[i + 1]])判断当前字符的值是否小于下一个字符的值,用于处理罗马数字的特殊规则,如果当前字符 s[i] 的值小于下一个字符 s[i + 1] 的值,意味着当前字符表示的是减法,例如 问题介绍中给出的几个特殊情况,'I''V' 前面表示 4,而 'I''X' 前面表示 9等。如满足上面的 if 条件,说明当前字符需要被从 ans 中减去(即ans = ans - value);当前字符的值不小于下一个字符的值,或者当前字符是最后一个字符,即执行ans = ans + value。

9. 

return ans;
    }
};

最终循环遍历完成后,返回 ans,即最终转换的整数值。

好了,本篇博客关于leetcode题库中第13题中的罗马数字转整数,官方题解代码详细讲解到此就结束了,如果有任何疑问请在评论区留言,看到随时会回复的,祝大家都能快速轻松刷题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值