13. 罗马数字转整数

一、题目链接

https://leetcode.cn/problems/roman-to-integer/

二、解题思路

三、实施步骤

四、Java程序

class Solution {
    /**
     * 返回七种基本罗马数字对应的阿拉伯数字
     *
     * @param romanDigit char类型的字符,代表一种基本罗马数字
     * @return int类型的整数,代表romanDigit对应的阿拉伯数字
     */
    public int getInt(char romanDigit) {
        switch (romanDigit) {
            case 'I':
                return 1;
            case 'V':
                return 5;
            case 'X':
                return 10;
            case 'L':
                return 50;
            case 'C':
                return 100;
            case 'D':
                return 500;
            case 'M':
                return 1000;
            default:
                return 0;
        }
    }

    /**
     * 将给定罗马数字转换为对应的阿拉伯数字
     *
     * @param s String类型的字符串,代表给定罗马数字
     * @return int类型的整数,代表s对应的阿拉伯数字
     */
    public int romanToInt(String s) {
        int n = s.length(); // 罗马数字长度
        char[] romanDigits = s.toCharArray(); // 将s转为字符数组处理
        int ans = 0; // 计算结果,初始时为0
        /* 遍历romanDigits数组的每一个基本罗马数字 */
        for (int i = 0; i < n; i++) {
            int current = getInt(romanDigits[i]); // 获取当前基本罗马数字对应的阿拉伯数字
            if (i < n - 1) { // 如果当前基本罗马数字不是最后一个字符                
                int next = (getInt(romanDigits[i + 1])); // 获取后一个基本罗马数字对应的阿拉伯数字
                if (next > current) { // 如果后一个阿拉伯数字较大
                    ans = ans + next - current; // 实际值用后一个阿拉伯数字减去当前的阿拉伯数字
                    i++; // 下一步不再考虑后一个基本罗马数字,跳过即可
                }
                else { // 否则,实际值就是当前的阿拉伯数字
                    ans = ans + current;
                }
            }
            else { // 否则,当前基本罗马数字是最后一个字符,直接累加到ans上
                ans = ans + current;
            }
        }
        return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江苏科技大学_计算机学院_潘磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值