leetcode-13. 罗马数字转整数

该博客主要介绍了一个Java实现的罗马数字转换为整数的算法。通过遍历输入的罗马数字字符串,判断相邻字符组合是否形成可减的情况,然后进行相应的数值累加。涉及到的关键技术包括字符串处理、条件判断和罗马数字的转换规则。
摘要由CSDN通过智能技术生成

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

在这里插入图片描述

class Solution {
    public int romanToInt(String s) {
  int sum = 0;

        for (int i = 0; i < s.length(); i++) {
            // 做判断
            // "III"
            // "II"
            if (i + 1 >= s.length()) {
                sum += changeNum(s.charAt(i));
            }
            else {
                // 是否是可减的
                int num1 = getSum(s.charAt(i), s.charAt(i + 1));
                if (num1 == 0) {
                    // 不可减
                    sum += changeNum(s.charAt(i));
                }
                else {
                    sum += num1;
                    i++;
                }
            }

        }
        return sum;

    }

     public static int getSum(char char1, char char2) {
        int num = 0;
        // char char1 = str.charAt(0);
        // char char2 = str.charAt(1);

        if (char1 == 'I' && (char2 == 'V' || char2 == 'X')) {
            num = changeNum(char2) - changeNum(char1);
        }
        else if (char1 == 'X' && (char2 == 'L' || char2 == 'C')) {
            num = changeNum(char2) - changeNum(char1);
        }
        else if (char1 == 'C' && (char2 == 'D' || char2 == 'M')) {
            num = changeNum(char2) - changeNum(char1);
        }
        return num;

    }

    /**
     * 获取数字
     * [一句话功能简述]
     * 
     * @param str
     * @return
     */
    public static int changeNum(char str) {
        int num = 0;
        switch (str) {
            case 'I':
                num = 1;
                break;
            case 'V':
                num = 5;
                break;
            case 'X':
                num = 10;
                break;
            case 'L':
                num = 50;
                break;
            case 'C':
                num = 100;
                break;
            case 'D':
                num = 500;
                break;
            case 'M':
                num = 1000;
            default:
                break;
        }

        return num;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值