LeetCode-题目整理【8】:罗马数字转整数、整数转罗马数字

  1. 罗马数字转整数
    罗马数字包含以下七种字符: 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。
    给定一个罗马数字,将其转换成整数。
    示例 1:
    输入: s = “III”
    输出: 3
    示例 2:
    输入: s = “IV”
    输出: 4
    示例 3:
    输入: s = “IX”
    输出: 9
    示例 4:
    输入: s = “LVIII”
    输出: 58
    解释: L = 50, V= 5, III = 3.
    示例 5:
    输入: s = “MCMXCIV”
    输出: 1994
    解释: M = 1000, CM = 900, XC = 90, IV = 4.
func romanToInt(s string) int {romanToIntMap := map[byte]int{'I': 1,'V': 5,'X': 10,'L': 50,'C': 100,'D': 500,'M': 1000,}total := 0prevValue := 0//从后往前for i := len(s) - 1; i >= 0; i-- {currentValue := romanToIntMap[s[i]]//是为了看是否是类似:4、9、19这种数字if currentValue < prevValue {total -= currentValue} else {total += currentValue}prevValue = currentValue}return total
}
  1. 整数转罗马数字
    罗马数字包含以下七种字符: 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。
    给你一个整数,将其转为罗马数字。
    示例 1:
    输入: num = 3
    输出: “III”
    示例 2:
    输入: num = 4
    输出: “IV”
    示例 3:
    输入: num = 9
    输出: “IX”
    示例 4:
    输入: num = 58
    输出: “LVIII”
    解释: L = 50, V = 5, III = 3.
    示例 5:
    输入: num = 1994
    输出: “MCMXCIV”
    解释: M = 1000, CM = 900, XC = 90, IV = 4.

解答此题目的最重要注意点是:

  • 要从大到小遍历数值, 因为考虑数字 4,它应该表示为 IV,而不是 IIII。如果我们按照从小到大的顺序遍历数组,会首先选择 I,然后再选择 I,得到的结果是 IIII,这是不正确的。
  • 要注意到 哈希表是无序的,要考虑到顺序从大到小,就需要添加数组
func intToRoman(num int) string {romanToIntMap := map[int]string{1000: "M",900:  "CM",500:  "D",400:  "CD",100:  "C",90:   "XC",50:   "L",40:   "XL",10:   "X",9:    "IX",5:    "V",4:    "IV",1:    "I",}result := ""//定义一个切片 values,按照从大到小的顺序存储罗马数字对应的数值。//如果不定义切片,在遍历哈希表中,由于哈希表是不按顺序的,得到的结果有多种情况,可能不会出现正确答案,//因此对于严格要求顺序的答案来说,需要遍历切片,不可以遍历哈希表vlaues := []int{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}for num > 0 {for _, value := range vlaues {if num >= value {result = result + romanToIntMap[value]num = num - valuebreak}}}return result
}// 从大到小遍历切片 values是为了确保在构建罗马数字时,优先选择较大的数值。这是因为罗马数字的表示方法是通过将较大的符号放在较小的符号的左边来表示相应的数值。// 如果我们按照从小到大的顺序遍历切片 values,那么在构建罗马数字时,可能会选择较小的符号,而不是较大的符号。这样会导致生成的罗马数字表示不符合规则。// 例如,考虑数字 4,它应该表示为 IV,而不是 IIII。如果我们按照从小到大的顺序遍历数组,会首先选择 I,然后再选择 I,得到的结果是 IIII,这是不正确的。// 因此,为了确保生成的罗马数字符合规则,我们需要按照从大到小的顺序遍历数组,这样可以先选择较大的符号,再选择较小的符号,确保生成的罗马数字是正确的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录训练营第三十期|第十四天|二叉树part01|● 理论基础● 递归遍历 ● 迭代遍历● 统一迭代

144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode…

iptables命令详解

简介 iptables 是 Linux 系统中用于配置 IPv4 数据包过滤规则的工具。它是 Linux 内核中 Netfilter 框架的一部分&#xff0c;通过设置规则&#xff0c;可以实现网络包的过滤、NAT 转发、端口映射等功能。 基本概念 表&#xff08;Tables&#xff09;&#xff1a; filter 表…

Nginx_入门

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 Nginx_入门 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、Nginx概述二、Nginx的应用…

GPU与SSD间的P2P DMA访问机制

基于PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;总线连接CPU、独立GPU和NVMe SSD的系统架构。 在该架构中&#xff0c;PCIe Swicth支持GPU与SSD之间快速的点对点直接内存访问&#xff08;peer-to-peer, p2p DMA&#xff09;。通常情况下&#xff0…

Qt-QFileDialog保存文件及获取带扩展名的文件名

正确用法 QFileDialog dialog(this, "Save File", QDir::currentPath(), "Text Files (.txt)"); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setDefaultSuffix("txt"); // << if (!dialog.exec())return; QString fileName …

latex添加图片以及引用的实例教程

原理 在 LaTeX 中插入图片&#xff0c;通常是使用 \includegraphics 命令&#xff0c;它是由 graphicx 包提供的。首先&#xff0c;确保在文档的前言部分&#xff08;\documentclass 之后和 \begin{document} 之前&#xff09;包含了 graphicx 包。 下面是一个基本的例子来展…

全志D1-H芯片Tengine支持

简介 ​ Tengine 是 OPEN AI LAB 推出的边缘 AI 计算框架&#xff0c;致力于解决 AIoT 产业链碎片化问题&#xff0c;加速 AI 产业化落地。Tengine 为了解决 AIoT 应用落地问题&#xff0c;重点关注嵌入式设备上的边缘 AI 计算推理&#xff0c;为海量 AIoT 应用和设备提供高性…

(学习日记)2024.01.20:通用工具库stdlib.h里好玩的函数

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

LeetCode 2765.最长交替子数组:O(n)的做法(两次遍历)

【LetMeFly】2765.最长交替子数组&#xff1a;O(n)的做法&#xff08;两次遍历&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/longest-alternating-subarray/ 给你一个下标从 0 开始的整数数组 nums 。如果 nums 中长度为 m 的子数组 s 满足以下条件&a…

开始学习vue2基础篇(指令)

一、 内容渲染指令 > {{}} 模板渲染&#xff08;模板引擎&#xff09; 1. {{数据绑定}} 2. {{简单计算}} 3. {{简单逻辑运算}}&#xff08;三元运算&#xff09; 4. {{做简单 js 判断}} 注意&#xff1a;不能写语句、不能解析 html 渲染、不能放在在属性身上 > v-…

使用Flink的所有pom文件

Flink中所有的pom文件中的索引 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xs…

[小程序]页面的构建

一、视图容器组件 ①View 视图区域组件&#xff0c;类似于HTML中的div&#xff0c;可以用来按块实现页面布局效果&#xff0c;具体实例如下&#xff1a; <view class"dock"><view>A</view><view>B</view><view>C</view> &…

大数据基础设施搭建 - Hbase

文章目录 一、解压压缩包二、配置环境变量三、修改配置文件3.1 修改hbase-env.sh3.2 修改hbase-site.xml3.3 修改regionservers 四、解决HBase和Hadoop的log4j兼容性问题&#xff0c;使用Hadoop的jar包五、HBase远程发送到其他集群六、启动七、停止八、基本操作8.1 进入Hbase客…

常用界面设计组件 —— 按钮组件、布局组件

2.4 按钮组件2.5 布局组件 2.4 按钮组件 QPushButton、QRadioButton 、QCheckBox都从 QAbstractButton&#xff0c;拥有一些共同的属性&#xff0c;如下图所 示&#xff1a; 图标使用setIcon()来设置&#xff0c;文本可以在构造函数或通过 setText()来设置。 可以使用 isCheck…

docker运行nginx不生效

docker运行nginx镜像时&#xff0c;设置端口映射&#xff0c;则只有该映射端口起作用&#xff0c;nginx配置的其他端口无效 监听端口 server {listen 8082;server_name ip地址;} server {listen 8083;server_name ip地址;}docker运行命令 docker run --name n…

探索人工智能的发展与影响

人工智能&#xff08;AI&#xff09;的快速发展正在深刻地改变着我们的生活和社会。从聊天机器人到自动驾驶汽车&#xff0c;AI的应用正日益广泛&#xff0c;为我们带来了前所未有的便利和创新。本文将深入探讨人工智能的发展历程、应用领域以及对社会的影响。 1. 人工智能的定…

【深度学习PyTorch简介】7.Load and run model predictions 加载和运行模型预测

Load and run model predictions 加载和运行模型预测 Load the model 加载模型 在本单元中&#xff0c;我们将了解如何加载模型及其持久参数状态和推理模型预测。 %matplotlib inline import torch import onnxruntime from torch import nn import torch.onnx as onnx impo…

CSS高级技巧导读

1&#xff0c;精灵图 1.1 为什么需要精灵图&#xff1f; 目的&#xff1a;为了有效地减少服务器接收和发送请求的次数&#xff0c;提高页面的加载速度 核心原理&#xff1a;将网页中的一些小背景图像整合到一张大图中&#xff0c;这样服务器只需要一次请求就可以了 1.2 精灵…

【WPF.NET开发】克隆打印机

本文内容 大多数企业有时会购买多台同一型号的打印机。 通常&#xff0c;这些打印机都安装了几乎相同的配置设置。 安装每台打印机既费时又容易出错。 使用 Microsoft .NET Framework 公开的 System.Printing.IndexedProperties 命名空间和 InstallPrintQueue 类可以立即安装从…

化妆-护肤品选购

粉底液 在下颚线涂抹 选择贴近肤色的 在选购时不能立即选购&#xff0c;而是涂抹后逛个街吃个饭&#xff0c;再看持久程度和服帖程度&#xff0c;所有粉底液都会脱妆 品牌 韩系品牌 VDL 韩系品牌偏光泽感(因为韩国人皮肤偏好) 所以一般会带有”亮泽“ “光感” 中国品牌 …