LeetCode-整数转罗马数字

2023-05-16

罗马数字包含以下七种字符: 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 到 3999 的范围内。

示例 1:

输入: 3
输出: "III"
示例 2:

输入: 4
输出: "IV"
示例 3:

输入: 9
输出: "IX"
示例 4:

输入: 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例 5:

输入: 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/integer-to-roman
 

解题思路:

  根据题目描述可知:所有罗马数字的表示差不多是用叠加的方式来实现的,比如最后一个例子,输入为1994,可以将它拆分为1000+900+90+4,再比如输入为2355,可以拆分为1000+1000+100+100+100+50+5,拆分后的因子分两类,一类就是1-3个叠加的 I,  X,C, 和 M,用来表示1-3,10-30,100-300,1000-3000,只要个、十、百、千位是这些可以直接替换,另一类就是涉及到两种符号拼接,如IV表示4,IX表示9这种,因此有一种方法去解决,首先将两类的罗马数字和阿拉伯数字匹配起来,并从大到小排序,当输入一个整数后,每次将这个整数与最大的罗马数字对应的数值比,如果整数更大,就减去这个罗马数字对应的整数,用一个变量存储这个罗马数字的符号,一直循环直到小于这个罗马数字对应 的数值,然后和第二大的罗马数字比,一直循环直到比完最后一个罗马数字I为止,期间整数不断减去罗马数字进行更新,变量一直拼接对应 的罗马数字符号作为新的字符串,最终输出这个字符串就是转化完成的罗马数字。

   在c语言中可以用结构体实现,java可以用一个int数组,一个string数组实现,python中可以用字典实现。

python版本示范:

class Solution:
    def intToRoman(self, num: int) -> str:
        dic = {"M":"1000",
        "CM":"900","D":"500","CD":"400","C":"100",
        "XC":"90","L":"50","XL":"40","X":"10",
        "IX":"9","V":"5","IV":"4","I":"1"}
        result = ""
        for key in dic:
            while(num >= int(dic[key])):
                num -= int(dic[key])
                result += key
        return result
        

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode-整数转罗马数字 的相关文章

  • 整数反转

    给出一个 32 位的有符号整数 xff0c 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下 32 位的

随机推荐

  • python批量爬取图片

    import requests import time import re 请求网页 header防止被禁止访问403 xff0c 伪装成浏览器 xff0c 不会被认为是python headers 61 39 User Agent 39
  • LeetCode罗马数字转整数

    罗马数字包含以下七种字符 I xff0c V xff0c X xff0c L xff0c C xff0c D 和 M 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如 xff0c 罗马数字 2 写做
  • STM32F407-跑马灯

    硬件准备 xff08 STM32F407ZGT6 xff09 1 初始准备 1 1打开Template模板 xff0c 在工程目录下新建HARDWARE文件夹 1 2 新建在HARDWARE路径中新建led c led h两个文件 xff0
  • LeetCode-括号匹配

    给定一个只包括 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 的字符串 xff0c 判断字符串是否有效 有效字符串需满足 xff1a 左括号必须用相同类型
  • STM32F407-串口通信基本原理

    1 处理器与外部设备通信的两种方式 xff1a 并行通信 传输原理 xff1a 数据各个位同时传输 优点 xff1a 速度快 缺点 xff1a 占用引脚资源多 串行通信 传输原理 xff1a 数据按位顺序传输 优点 xff1a 占用引脚资源
  • STM32F407-串口数据传送

    一 串口基础 1 常用的串口相关寄存器 USART SR状态寄存器USART DR数据寄存器USART BRR波特率寄存器 2 串口操作相关库函数 xff08 省略入口参数 xff09 void USART Init 串口初始化 xff1a
  • 外观数组

    外观数列 是一个整数序列 xff0c 从数字 1 开始 xff0c 序列中的每一项都是对前一项的描述 前五项如下 xff1a 1 1 2 11 3 21 4 1211 5 111221 1 被读作 34 one 1 34 34 一个一 34
  • STM32F407-外部中断

    一 基本概念 STM32F4的每个IO都可以作为外部中断输入 STM32F4的中断控制器支持22个外部中断 事件请求 xff1a EXTI线0 15 xff1a 对应外部IO口的输入中断 EXTI线16 xff1a 连接到PVD输出 EXT
  • 杨辉三角①与②

    给定一个非负整数 numRows xff0c 生成杨辉三角的前 numRows 行 在杨辉三角中 xff0c 每个数是它左上方和右上方的数的和 示例 输入 5 输出 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 思路 xff1
  • wireshark 清空列表

    windows ctrl 43 shift 43 D mac ctrl 43 shift 43 D 操作后 xff1a
  • 二叉树最大深度与最小深度

    给定一个二叉树 xff0c 找出其最大深度 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数 说明 叶子节点是指没有子节点的节点 示例 xff1a 给定二叉树 3 9 20 null null 15 7 xff0c 3 9 20 15
  • 买卖股票的最佳时机①

    给定一个数组 xff0c 它的第 i 个元素是一支给定股票第 i 天的价格 如果你最多只允许完成一笔交易 xff08 即买入和卖出一支股票 xff09 xff0c 设计一个算法来计算你所能获取的最大利润 注意你不能在买入股票前卖出股票 示例
  • 图像语义分割原理及常用方法

    1图像语义分割的概念 1 1图像语义分割的概念与原理 图像语义分割可以说是图像理解的基石性技术 xff0c 在自动驾驶系统 xff08 具体为街景识别与理解 xff09 无人机应用 xff08 着陆点判断 xff09 以及穿戴式设备应用中举
  • TensorFlow基础篇

    1 TensorFlow 是什么 是一个深度学习库 xff0c 由 Google 开源 xff0c 可以对定义在 Tensor 张量 上的函数自动求导 Tensor 张量 意味着 N 维数组 xff0c Flow 流 意味着基于数据流图的计
  • 从国外官网github下载各种软件安装包项目太慢怎么办

    1 网速太慢 xff0c 被限速经常失败 xff0c 复制下面网址到迅雷下载 2 更改下载源 pip install selenium i http pypi douban com simple 还有多个其他下载源清华的下载源好像不能用了
  • 深度学习-神经网络编程使用过程中的问题汇总。

    1 pip安装下载速度慢 xff0c 不稳定容易失败等问题 第一个方法是改变下载源 pip install selenium i http pypi douban com simple 还有多个其他下载源清华的下载源好像不能用了 xff0c
  • Tensorflow问题之赋值失败为空值

    import tensorflow as tf a 61 tf zeros 2 3 b 61 tf ones 4 c 61 tf fill 2 2 9 print 34 a 34 a print 34 b 34 b print 34 c 3
  • 神经网络----TF1与TF2代码实现鸢尾花分类

    运行环境 xff1a python3 6 5 43 tensorflow1 13 2 python3 7 43 tensorflow2 0 Tensorflow1 xff1a 1 首先加载鸢尾花数据集 xff0c 读入输入特征以及标签 直接
  • 语义分割权重h5文件下载失败问题

    这个问题困扰我很久 xff0c 所以单拿出来记录以泄我心头之恨 xff0c 从github上下载预训练权重太慢 xff0c 经常发生timeout错误导致下载失败 xff0c 查了好多网站都没办法解决我的问题 xff0c 于是乎自己研究了一
  • LeetCode-整数转罗马数字

    罗马数字包含以下七种字符 xff1a I xff0c V xff0c X xff0c L xff0c C xff0c D 和 M 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如 xff0c 罗马数