当前位置: 首页 > article >正文

罗马数字转整数---每日小题

 

目录

 

题目

题目分析

【引入】

【补充引入】


题目

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值

I 1

V 5

X 10

L 50

C 100

D 500

M 1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。

C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。

题目分析

【引入】

‌在Java中,Map map = new HashMap<>(); 这行代码创建了一个键为String类型、值为Integer类型的HashMap对象。‌

Map接口和HashMap类的基本概念

‌Map接口‌:Map是一个双列集合,存储键值对(key-value pairs)。每个键(key)只能映射到一个值(value),但每个键最多只能映射到一个值,即键不能重复。

‌HashMap类‌:实现了Map接口,使用哈希表来实现键值对的存储。HashMap的键和值都可以为null,但每个键只能映射到一个值。

创建和初始化

‌创建‌:通过new HashMap<>()创建一个空的HashMap对象。

‌初始化‌:可以通过put()方法添加键值对,例如:map.put("key1", 1);。

遍历方法

‌entrySet()‌:通过entrySet()方法获取键值对集合,然后遍历每个键值对。

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int romanToInt(String s) {
        // 创建一个映射来存储罗马数字符号及其对应的整数值
        Map<String, Integer> map = new HashMap<>();
        map.put("I", 1);
        map.put("IV", 4);
        map.put("V", 5);
        map.put("IX", 9);
        map.put("X", 10);
        map.put("XL", 40);
        map.put("L", 50);
        map.put("XC", 90);
        map.put("C", 100);
        map.put("CD", 400);
        map.put("D", 500);
        map.put("CM", 900);
        map.put("M", 1000);
        
        int ans = 0;
        int i = 0;
        
        // 遍历字符串,直到到达末尾
        while (i < s.length()) {
            // 检查当前位置和下一个位置组成的两字符子字符串是否在映射中
            if (i + 1 < s.length() && map.containsKey(s.substring(i, i + 2))) {
                // 如果在,则添加对应的整数值,并将索引移动两位
                ans += map.get(s.substring(i, i + 2));
                i += 2;
            } else {
                // 如果不在,则检查当前位置的单字符子字符串是否在映射中
                // 由于我们已经检查了所有可能的两字符组合,所以这里不需要额外的检查
                ans += map.get(s.substring(i, i + 1));
                // 将索引移动一位
                i++;
            }
        }
        
        return ans;
    }
}

【先检索双位的情况,不符合双位存储的情况下再去检索单位的情况】

【补充引入】

1.字符串切片:s.substring(i, i + 2) 从字符串 s 中提取一个子字符串,起始索引为 i,结束索引为 i + 2(但不包括 i + 2)。

2.映射查找:map.get(...) 方法在映射(或称为字典、哈希表)map 中查找与给定键(在本例中是我们刚刚提取的子字符串)相关联的值。如果映射中存在该键,则返回对应的值;如果不存在,则根据映射的具体实现可能返回 null(在 Java 中对于 HashMap 等大多数实现是如此),或者在某些情况下可能抛出一个异常(如 NoSuchElementException,但这在标准的 Java 映射实现中并不常见)。然而,在编写健壮的代码时,通常应该检查映射中是否存在键,以避免潜在的 NullPointerException。

3.map.containsKey(Object key) 是 Map 接口中的一个方法,用于检查该映射(或称为字典、哈希表)是否包含指定的键。如果映射包含指定键的映射关系,则此方法返回 true;如果不包含,则返回 false。


http://www.kler.cn/a/396323.html

相关文章:

  • vue2/vue3中使用的富文本编辑器vue-quill
  • Git如何简单使用
  • 释放高级功能:Nexusflows Athene-V2-Agent在工具使用和代理用例方面超越 GPT-4o
  • 数字孪生乡村:数字乡村智慧化营建思路
  • c#————委托Action使用例子
  • 软件设计师考试大纲
  • ctfshow-web入门-SSTI(web369-web372)下
  • 数据结构-二叉树及其遍历
  • 第二十九篇——线性代数:“矩阵”到底怎么用?
  • 【数据结构】双向链表定义与实现
  • linux 工具curl详解
  • 效益登记册效益管理计划
  • 用WordPress需要学习哪些编程知识
  • CentOS 9 配置网卡
  • Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘
  • NPOI 实现Excel模板导出
  • 【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】
  • 【Unity Bug 随记】unity version control 报 xx is not in a workspace.
  • 时序数据库TDEngine
  • Day 65 || SPFA、判断负权回路、bellman_ford之单源有限最短路
  • 【leetcode】N皇后 回溯法c++
  • 一文说清libc、glibc、glib的发展和关系
  • 《JavaScript 前端开发》
  • python学习_2.去除字符strip方法
  • CC3学习记录
  • H5页面多个视频如何只同时播放一个?