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

【leetcode】12. 整数转罗马数字

文章目录

    • 题目
    • 题解
      • 1. 枚举(千/百/十/个)
      • 2. 模拟

题目

12. 整数转罗马数字
在这里插入图片描述
罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则:

如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。
如果该值以 4 或 9 开头,使用 减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (V) 减 1 (I): IV ,9 是 10 (X) 减 1 (I):IX。仅使用以下减法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。
只有 10 的次方(I, X, C, M)最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (V),50 (L) 或 500 (D)。如果需要将符号附加4次,请使用 减法形式。
给定一个整数,将其转换为罗马数字。

示例 1:

输入:num = 3749

输出: “MMMDCCXLIX”

解释:

3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)
700 = DCC 由于 500 (D) + 100 © + 100 ©
40 = XL 由于 50 (L) 减 10 (X)
9 = IX 由于 10 (X) 减 1 (I)
注意:49 不是 50 (L) 减 1 (I) 因为转换是基于小数位

示例 2:

输入:num = 58

输出:“LVIII”

解释:

50 = L
8 = VIII

示例 3:

输入:num = 1994

输出:“MCMXCIV”

解释:

1000 = M
900 = CM
90 = XC
4 = IV

题解

1. 枚举(千/百/十/个)

class Solution(object):def intToRoman(self, num):""":type num: int:rtype: str"""# 双指针n = len(str(num))res = []num_list = list(str(num))map_roman = {1: "I", 5: "V", 10: "X", 50: "L", 100: "C", 500: "D", 1000: "M",4: "IV", 9: 'IX', 400: 'CD', 900: 'CM', 90: 'XC', 40: "XL"}for i, single_num in enumerate(num_list):single_num = int(single_num)value = single_num * (10 ** (n - i - 1))if value in map_roman:res.append(map_roman[value])else:if single_num <= 3:value = 10 ** (n - i - 1)for j in range(single_num):res.append(map_roman[value])if single_num > 5:res.append(map_roman[5 * 10 ** (n - i - 1)])sub = single_num - 5value_sub = 10 ** (n - i - 1)for k in range(sub):res.append(map_roman[value_sub])return "".join(res)

2. 模拟

class Solution(object):VALUE_SYMBOLS = [(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"),]def intToRoman(self, num):""":type num: int:rtype: str"""roman = list()for value, symbol in Solution.VALUE_SYMBOLS:while num >= value:num -= valueroman.append(symbol)if num == 0:breakreturn "".join(roman)
http://www.dtcms.com/a/335269.html

相关文章:

  • 关于“双指针法“的总结
  • 【Python】Python爬虫学习路线
  • “openfeign“调用接口上传文件报错:Failed to deleted temporary file used for part [file]
  • c++11扩展(c++11并发库)
  • 在职老D渗透日记day18:sqli-labs靶场通关(第26关)get报错注入 过滤or和and基础上又过滤了空格和注释符 ‘闭合 手动注入
  • echarts 画一个饼图,并且外围有一个旋转动画
  • linux下程序运行一段时间无端崩溃/被杀死,或者内存占用一直增大。linux的坑
  • 11.web api 2
  • 模式匹配自动机全面理论分析
  • AI短视频爆火?记录AIGC在影视制作场景的实践教程
  • 大模拟 Major
  • 随机整数列表处理:偶数索引降序排序
  • jd-hotkey探测热点key
  • 流量分析服务一审构成非法经营罪二审改判:数据服务的法律边界
  • 电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
  • ethernet_input到应用层处理简单分析
  • 5 索引的操作
  • K8s核心组件全解析
  • 如何使用嵌入模型创建本地知识库Demo
  • 三、memblock 内存分配器
  • 深入理解文件硬链接、软链接与引用计数的那些事
  • 机器学习相关算法:回溯算法 贪心算法 回归算法(线性回归) 算法超参数 多项式时间 朴素贝叶斯分类算法
  • 超详细yolo8/11-pose人体姿态全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • 8.16、8.17 JavaWeb(MyBatis P116-P134)
  • 【网络与爬虫 00】试读
  • lcx、netcat、powercat--安装、使用
  • 【RH134知识点问答题】第 10 章:控制启动过程
  • 深入浅出OpenGL的glDrawArray函数
  • 设计索引的原则有哪些?
  • 数据结构初阶(16)排序算法——归并排序