Leetcode:整数转罗马数字

题目链接:12. 整数转罗马数字 - 力扣(LeetCode)

普通版本(贪心)

条件分析:罗马数字由 7 个不同的单字母符号组成,每个符号对应一个具体的数值。此外,减法规则还给出了额外的 6 个复合符号,且输入的数字满足1 <= num <= 3999

解法分析:为了表示一个给定的整数 num,我们寻找不超过 num 的最大符号值,将 num 减去该符号值,然后继续寻找不超过 num 的最大符号值,将该符号拼接在上一个找到的符号之后,循环直至 num 为 0。最后得到的字符串即为 num 的罗马数字表示

class Solution {
public:string intToRoman(int num) {int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};string reps[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};string res;//最终结果for (int i = 0; i < 13; i++ ){ while(num >= values[i]){num -= values[i];res += reps[i];}}return res;}
};

时间复杂度:O(1)(由于 valueSymbols 长度是固定的,且这 13 字符中的每个字符的出现次数均不会超过 3,因此循环次数有一个确定的上限。对于本题给出的数据范围,循环次数不会超过 15 次)

空间复杂度:O(1)

也是普通版本(硬编码)

由上述内容可得:

千位数字只能由 M 表示
百位数字只能由 C,CD,D 和 CM表示
十位数字只能由 X,XL,L 和 XC 表示
个位数字只能由 I,IV,V 和 IX表示

结论:这恰好把这 13 个符号分为四组,且组与组之间没有公共的符号。因此,整数 num的十进制表示中的每一个数字都是可以单独处理的。

进一步地,我们可以计算出每个数字在每个位上的表示形式,整理成一张硬编码表,利用模运算和除法运算,我们可以得到 num 每个位上的数字(且不违反题目中说的IXCM最多可以附加三次, V、L、D只能被附加一次

const string thousands[] = {"", "M", "MM", "MMM"};
const string hundreds[]  = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
const string tens[]      = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
const string ones[]      = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};class Solution {
public:string intToRoman(int num) {return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];}
};

时间复杂度:O(1)(由于 valueSymbols 长度是固定的,且这 13 字符中的每个字符的出现次数均不会超过 3,因此循环次数有一个确定的上限。对于本题给出的数据范围,循环次数不会超过 15 次)

空间复杂度:O(1)

~over~

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

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

相关文章

简单聊下服务器防病毒

在当今数字化时代&#xff0c;服务器作为数据存储、处理与传输的核心设备&#xff0c;其安全性显得尤为关键。服务器防病毒工作&#xff0c;不仅是保障企业信息安全的重要一环&#xff0c;更是维护用户数据隐私的关键举措。以下&#xff0c;我们将从多个方面&#xff0c;简单探…

Unity之XR Interaction Toolkit如何使用XRSocketInteractable组件

前言 在虚拟现实(VR)和增强现实(AR)开发中,交互性是提升用户体验的关键。Unity作为一个领先的游戏开发引擎,提供了多种工具支持VR/AR开发。Unity的OpenXR插件扩展了这一功能,提供了更强大和灵活的交互系统。其中一个非常有用的组件是XRSocketInteractable。本文将详细介…

串口控制小车和小车PWM调速

1.串口控制小车 1. 串口分文件编程进行代码整合&#xff0c;通过现象来改代码 2.接入蓝牙模块&#xff0c;通过蓝牙控制小车 3.添加点动控制&#xff0c;如果APP支持按下一直发数据&#xff0c;松开就停止发数据&#xff08;蓝牙调试助手的自定义按键不能实现&#xff09;&…

随笔-我在武汉一周了

做梦一样&#xff0c;已经来武汉一周了&#xff0c;回顾一下这几天&#xff0c;还真是有意思。 周一坐了四个小时的高铁到了武汉站&#xff0c;照着指示牌打了个出租车。司机大姐开得很快&#xff0c;瞅了眼&#xff0c;最快速度到了110&#xff0c;差点把我晃晕。一下车就感觉…

计算机视觉与模式识别实验2-2 SIFT特征提取与匹配

文章目录 &#x1f9e1;&#x1f9e1;实验流程&#x1f9e1;&#x1f9e1;SIFT算法原理总结&#xff1a;实现SIFT特征检测和匹配通过RANSAC 实现图片拼接更换其他图片再次测试效果&#xff08;依次进行SIFT特征提取、RANSAC 拼接&#xff09; &#x1f9e1;&#x1f9e1;全部代…

旋转油封和骨架油封有什么区别?

在机械系统的密封解决方案中&#xff0c;旋转油封和骨架油封是两种常见的选择。每种类型都具有独特的功能和优势&#xff0c;适用于不同的应用。本文将深入探讨旋转油封和骨架油封的主要区别&#xff0c;提供见解&#xff0c;帮助您为您的需求选择合适的油封。 1、功能设计 旋…

nginx异常重启

宝塔定时任务上添加 定时任务&#xff0c; 每10分钟 执行一次&#xff0c; 用于判断 nginx 是否异常导致 所有访问都访问不了&#xff0c;如果是&#xff0c; 则 重启nginx 这里需要创建一个 127.0.0.1 的站点 用来判断nginx是否正常 #!/bin/bash# Nginx 正常运行的端口号 NG…

Java编程常见问题汇总一

系列文章目录 文章目录 系列文章目录前言一、字符串连接误用二、错误的使用StringBuffer三、测试字符串相等性四、数字转换成字符串五、利用不可变对象(Immutable) 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分…

浅谈防勒索病毒的关键

主机加固能否做好防勒索病毒的工作&#xff0c;一直是网络安全领域的重要议题。随着信息技术的飞速发展&#xff0c;勒索病毒等网络威胁层出不穷&#xff0c;对企业和个人数据安全构成了严重威胁。因此&#xff0c;如何通过主机加固提升安全防护能力&#xff0c;防止勒索病毒的…

【微信小程序】小锦哥小程序工具 v2.3.8.0

# 简介 小锦哥小程序工具是一款可以对微信小程序进行解密或者反编译的工具&#xff0c;通过这款工具&#xff0c;可以对别人已经发布的小程序进行解密或者是反编译&#xff0c;然后查看源代码。对于网络安全人员来说&#xff0c;可以使用该工具进行安全审计&#xff0c;发现其…

[ubuntu][pcl]PCL can not be found on this machine

Ubuntu 20.04无法找到PCL&#xff0c;因为“sudo install libpcl-dev”安装后包含的目录不正确 操作系统: Ubuntu20.04 PCL信息&#xff1a; Package: libpcl-dev Version: 1.10.0dfsg-5ubuntu1 Priority: extra Section: universe/libdevel Source: pcl Origin: Ubuntu 由…

(函数)判断字符串元音字母(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明判断元音函数&#xff1b; void vowel(char a[100], char b[100]);int main() {//初始化变量值&#xff1b;char a[100] { 0 };char b[100] { 0 };//获取…

PR怎么剪辑短视频:成都鼎茂宏升文化传媒公司

PR怎么剪辑短视频&#xff1a;从入门到精通的剪辑技巧 在当今的媒体时代&#xff0c;短视频已经成为了人们日常生活中不可或缺的一部分。而要制作出高质量的短视频&#xff0c;熟练掌握一款强大的视频剪辑软件是必不可少的。在众多软件中&#xff0c;Adobe Premiere Pro&#…

【数据结构】图论——Prim算法和Kruskal算法

目录 Prim算法和Kruskal算法Prim算法的原理数据结构算法步骤解释算法实现代码示例 Kruskal 算法Kruskal算法的原理和步骤Kruskal算法的实现数据结构并查集操作Kruskal算法 Prim算法和Kruskal算法 文章: 【数据结构】图论&#xff08;图的储存方式&#xff0c;图的遍历算法DFS和…

Linux.用户

使用su - 切换用户 切换root时要输入密码&#xff0c;但是看不到 创建用户组 groupadd用户组名&#xff0c;用getent查看有哪些组 getent group 创建用户 在root身份中使用gentent passwd 可以查当前的用户信息 使用getent group查看有哪些组 使用chmod修改权限 快捷方法…

【算法速查】万字图解带你快速入门八大排序(下)

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;首先在这里祝大家中秋国庆双节同乐&#xff01;&#xff01;抓住假期的小尾巴&#xff0c;今天来把算法速查的八大排序的后续写完&#xff0c;当…

PDF格式分析(八十二)——电影注释(movie)

电影注释(PDF1.2及其以上版本)&#xff0c;该注释包含图像和声音&#xff0c;声音通过扬声器进行播放&#xff0c;图像则显示在计算机屏幕上&#xff0c;如同一个视频播放器一样。当该类型注释被激活时&#xff0c;视频将被播放。 下表将显示电影注释的字典条目&#xff1a; 条…

【网络技术】【Kali Linux】Wireshark嗅探(十六)TLS(传输层安全协议)报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

Android下HWC以及drm_hwcomposer普法(下)

Android下HWC以及drm_hwcomposer普法(下) 引言 不容易啊&#xff0c;写到这里。经过前面的普法(上)&#xff0c;我相信童鞋们对HWC和drm_hwcomposer已经有了一定的认知了。谷歌出品&#xff0c;必须精品。我们前面的篇章见分析到啥来了&#xff0c;对了分析到了HwcDisplay::in…

mysql查询数据知识点

1、基本查询语句 SELECT {*|} [FROM ,...[WHERE ][GROUP BY ][HAVING [{}...]][ORDER BY ][LIMIT[,]]] 2、单表查询 2.1、查询所有字段&#xff1a; 1)、在SELECT语句中使用‘*’通配符查询所有字段 SELECT * FROM 表名; 2)、在SELECT语句中指定所有字段。 …