• 13.罗马数字转整数


    题目来源:

    力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/roman-to-integer/题目简介:

    就是把罗马数字转化成阿拉伯数字。

    思路1:

    确定好每个罗马字母所对应的值,遍历整个字符串,后一个字符小于前一个字符,两字符就是相加,后一个字符大于前一个字符,两字符就是相减,当没有下一位时,做加法即可。

    代码实现:

    import java.util.*;

    class Solution {
        public int romanToInt(String s) {
            int sum = 0;
            int preNum = getValue(s.charAt(0));
            for(int i = 1;i < s.length(); i ++) {
                int num = getValue(s.charAt(i));
                if(preNum < num) {
                    sum -= preNum;
                } else {
                    sum += preNum;
                }
                preNum = num;
            }
            sum += preNum;
            return sum;
        }
        
        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;
            }
        }
    }

    思路二:哈希表

    简单的把switch函数换成键值指对

    class Solution {
    private:
        unordered_map 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;
        }
    };
     

  • 相关阅读:
    网络分类面试题
    从服务智能化中寻找新增量
    虚拟机配置网络ip,主打一个详细
    离散数学(十三):关系的闭包
    React基础-JSX语法列表渲染详解
    下一代智能合约开发语言(一)
    MongoDB基础学习
    iTerm2+oh-my-zsh搭个Mac电脑上好用好看终端
    Netty 学习(十):ChannelPipeline源码说明
    玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示fastboot刷机
  • 原文地址:https://blog.csdn.net/stay_awake__/article/details/126891222