力扣练习之罗马数字转整数

我爱海鲸 2022-10-10 19:36:37 初级算法

简介初级算法、数学

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnsdi2/

解法一:

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

        int preNum = getValue(s.charAt(0));
        for (int i = 1 ; i < s.length(); i++) {
            int num = getValue(s.charAt(i));
            
            if (preNum < num) {
                result -= preNum;
            } else {
                result += preNum;
            }

            preNum = num;
        }
        
        result += preNum;
        return result;

    }

    private int getValue(char ch) {
        switch (ch) {
            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;
        }
    }
}

思路:

罗马数字中小的数字在大的数字的右边。也就是说如果小写的在大写的右边,每个字符都是一个有效的数字,他表示的数字就是所有字符相加,比如VI就是5+1=6。

如果小写的在大写的左边,就是无效的,只有一种情况,就是这个小写的和大写的组成一个数字,比如IV表示的是5-1=4,

 

你好:我的2025