LeetCode-12:Integer to Roman(整数转罗马数字)

避坑指南:STM32CubeMX配置USB虚拟串口时Heap Size设置的那些坑 本文深入剖析了使用STM32CubeMX配置USB虚拟串口时,因Heap Size设置不当导致设备无法识别的常见问题。文章从故障现象出发,详细解释了堆内存不足如何影响USB枚举过程,并提供了从内存布局分析、动态监控到系统化调试的完整解决方案,帮助开发者从根本上避免这一配置陷阱。 阅读详情

题目:

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

For example, two is written as II in Roman numeral, just two one’s added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

I can be placed before V (5) and X (10) to make 4 and 9.
X can be placed before L (50) and C (100) to make 40 and 90.
C can be placed before D (500) and M (1000) to make 400 and 900.
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.

例子:

Example 1:

Input: 3
Output: "III"

Example 2:

Input: 4
Output: "IV"

Example 3:

Input: 9
Output: "IX"

Example 4:

Input: 58
Output: "LVIII"
Explanation: C = 100, L = 50, XXX = 30 and III = 3.

Example 5:

Input: 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

问题解析:

给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内.

思路标签

分段讨论、贪婪算法

解答:

1.分段讨论
  • 建立罗马符号和对应整数的数组;
  • 分别讨论当前位(从高位到低位)的大小的不同情况:以x为例。
  • 当x<4的情况;当x == 4的情况;当x>4 & x<9的情况;以及当x == 9的情况。
class Solution {
public:
    string intToRoman(int num) {
        string res = "";
        char roman[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
        int value[] = {1000, 500, 100, 50, 10, 5, 1};

        for (int n = 0; n < 7; n += 2) {
            int x = num / value[n];
            if (x < 4) {
                for (int i = 1; i <= x; ++i) res += roman[n];
            } 
            else if (x == 4) 
                res = res + roman[n] + roman[n - 1];
            else if (x > 4 && x < 9) {
                res += roman[n - 1];
                for (int i = 6; i <= x; ++i) res += roman[n];
            }
            else if (x == 9) 
                res = res + roman[n] + roman[n - 2];

            num %= value[n];            
        }
        return res;
    }
};
2.贪婪算法
  • 建立罗马符号和对应整数的数组;
  • 每次查表找出当前最大的数,减去该数后再继续查表。
class Solution {
public:
    string intToRoman(int num) {
        string res = "";
        vector<int> val{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        vector<string> str{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        for (int i = 0; i < val.size(); ++i) {
            while (num >= val[i]) {
                num -= val[i];
                res += str[i];
            }
        }
        return res;
    }
};
新手必看:如何用PhaGCN2和vConTACT2搞定宏病毒组注释(附避坑指南) 本文为宏病毒组研究新手提供了使用PhaGCN2和vConTACT2进行病毒注释的完整实战指南。内容涵盖从Conda环境配置、软件安装、参数解析到结果解读的全流程,并重点分享了整合双工具进行交叉验证的策略与常见报错解决方案,旨在帮助研究者高效、准确地完成病毒分类注释工作。 阅读详情

相关推荐

从零到一:RK3588平台上的星闪模块驱动移植全解析

本文详细解析了在RK3588平台上移植UB37星闪模块驱动的完整流程,涵盖内核配置、设备树适配、驱动编译、功能测试等关键步骤。通过实践指导,帮助开发者掌握星闪技术在嵌入式系统中的集成与应用,提升无线通信模块的开发效率。

qsc90123456的博客 337

LeetCode算法:12. 整数转罗马数字

罗马数字符号罗马数字由 7 个不同的单字母符号组成,每个符号对应一个具体的数值。此外,减法规则(如问题描述中所述)给出了额外的 6 个复合符号。这给了我们总共 13 个独特的符号(每个符号由 1 个或 2 个字母组成),如下图所示。罗马数字的唯一表示法让我们从一个例子入手。考虑 140 的罗马数字表示,下面哪一个是正确的?我们用来确定罗马数字的规则是:对于罗马数字从左到右的每一位,选择尽可能大的符号值。对于 140,最大可以选择的符号值为 C=100。

qq_24691007的博客 873

告别纯文本RAG:用Dify 1.11.0多模态知识库,5步搭建一个能“读图”的智能客服助手

本文详细介绍了如何利用Dify 1.11.0多模态知识库构建智能视觉客服助手,通过5个步骤实现图片内容理解与专业回复。从准备多模态素材到配置知识库节点,再到设计工作流逻辑和性能优化,帮助开发者快速搭建高效客服系统,显著提升用户体验和问题解决效率。

weixin_30832143的博客 452

12. Integer to Roman(整数转罗马数字)解法(C++ & 注释)

12. Integer to Roman(整数转罗马数字)1. 题目描述2. 列举组合法2.1 解题思路2.2 实例代码 1. 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,

主要研究图形学相关领域 629

DLMS—Cryptographic algorithms—(Green-Book)加密算法

密码学是数学的一个分支,基于数据的转换,并且可以用来提供多种安全服务:保密性、数据完整性、认证、授权和不可否认性。密码学依赖于两个基本组成部分:算法(或密码学方法)和密钥。算法是一个数学函数,而密钥是在转换过程中使用的参数。密码算法和密钥用于对数据应用密码保护(例如,加密数据或生成数字签名),以及移除或检查保护(例如,解密加密的数据或验证数字签名)。密码哈希函数:这类函数不需要密钥(尽管它们可以以使用密钥的模式使用)。哈希函数通常用作算法的一个组成部分,以提供安全服务。见9.2.3.2节。对称密钥算法。

一个bug是bug,多个bug能work 1710

如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】

How to reduce the number of transistors to reduce circuit area? -- Take the Binary Full Adder as an example 优化面积的方法 1. 减少晶体管的数量 2. 改变gate matrix的布局

Jie_MSD的博客 6434

12. Integer to Roman

12. Integer to Roman题目 题目的意思很简单:将整数转为罗马数字表示。解题思路1、首先,先介绍一下罗马数字的7个基本单元“I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)”。 2、接着让我们看一下数字转罗马数字的一些规则: 1)相同数字连写不超过3次。 2)小的数字在大的数字的左边时,表示大数减小数。但是小的数字仅限于I、X、C三个。所

caneo_nj的博客 293

【Claude】Not logged in 错误:未登录状态的判断与 /login 认证路径 bug报错已解决

login 是首选修复:大多数 "Not logged in" 只需重新执行 /login检查系统时间:时间偏差是 Token 验证失败的常见原因避免密钥库被清理:将 Claude Code 添加到系统清理工具的白名单企业环境用 API Key:如果组织禁用 OAuth,使用 API Key 认证区分凭证类型:理解 Not logged in(无凭证)vs Invalid key(有但无效)

博客 7314

12. Integer to Roman整数转罗马数字

Integer to Roman整数转罗马数字

DXB2021的博客 341

17 指挥AI写Mamba相关模型代码,快速适配大模型场景

本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十七篇,属于第三阶段多场景实战核心内容。本篇聚焦当下大模型领域热门的**Mamba架构**,针对零基础大模型开发、无深度学习基础的使用者,拆解指挥AI生成Mamba基础模型、微调适配、推理部署代码的核心方法,覆盖Mamba基础模块搭建、简易序列建模、小样本微调、本地推理等高频场景,提供可直接复用的高质量指令模板、完整可运行代码、环境配置与避坑指南,无需精通Transformer、状态空间模型等底层原理,轻松上手Mamba大模型开发。

coreopt的博客 61

python乘法运算 信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

本文解析了全国青少年信息素养大赛Python编程挑战赛的乘法运算题目。题目要求通过递归算法实现两个自然数的乘法运算,并输出算式。算法分析指出可将乘法转化为累加,使用递归函数实现。程序代码展示了一个自定义函数add(),通过递归调用完成累加运算。文章还分析了考点,包括递归函数、输入处理、分支语句等编程基础知识的应用。最后强调解题方法的多样性,重点在于理解递归原理和实现题目要求。该题目难度适中,主要考查选手对递归算法的理解和编程基础能力。

青少年编程学习指导 789

LeetCode 12. Integer to Roman, 整数转罗马数字 ,C#

前言 本文介绍了 LeetCode 第 12 题 , “Integer to Roman”, 也就是 “整数转罗马数字” 的问题. 本文使用 C# 语言完成题目。 题目 English LeetCode 12. Integer to Roman Roman numerals are represented by seven different symbols: I, V, X, L, C...

wf824284257的博客 763

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Leetcode 12. Integer to Roman 整数转罗马数字

12. Integer to Roman 整数转罗马数字 标签: Leetcode 题目地址:https://leetcode-cn.com/problems/integer-to-roman/ 题目描述 罗马数字包含以下七种字符:&amp;amp;nbsp;I,&amp;amp;nbsp;V,&amp;amp;nbsp;X,&amp;amp;nbsp;L,C,D&amp;amp;nbsp;和&amp;amp;nbsp;M。 字符

CoderWangSon 324

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【LeetCode 面试经典150题】12. Integer to Roman 整数转罗马数字

罗马数字通常从左到右书写,且大的符号在前,小的符号在后。因为1在5的前面,所以我们要减去它,得到4。例如,数字2用罗马数字表示为II,即两个1相加。要将整数转换为罗马数字,可以使用贪心算法的思想,从最大的罗马数字开始逐步减去,直到整数为0为止。这个算法的关键思想是尽可能多地使用大的罗马数字来表示整数,以得到最简洁的罗马数字表示。罗马数字由七个不同的符号表示:I、V、X、L、C、D和M。数组,从最大的罗马数字开始向最小的罗马数字遍历。,分别存储罗马数字的整数值和对应的罗马字符。作为整数对应的罗马数字表示。

qq_43513394的博客 1069

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode 12. Integer to Roman 整数转罗马数字

题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的...

it-hao的博客 293

Leetcode 12 整数转罗马数字 Integer to Roman

罗马数字包含以下七种字符:I,V,X,L,C,D和M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II,即为两个并列的 1。...

Iridescence 151

Leetcode12.Integer to Roman整数转罗马数字

罗马数字包含以下七种字符: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。 通常情况下,罗马数字中小的数字在...

Ha12312的博客 173

力扣12-整数转罗马数字Integer to Roman

题目 举例 思路 unordered_map存储罗马字符与数值的对应关系 从左到右遍历罗马字符串,在直接加到数字上之前先查看一下是否比右边的数值小,小的话就是减去 代码 class Solution { public: int romanToInt(string s) { int res = 0; unordered_map<char,int&...

qq_37299596的博客 221

LeetCode 12 — Integer to Roman(整数转罗马数字)

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D ...

卓尔货币的博客 455

【LeetCode】#12整数转罗马数字(Integer to Roman)

【LeetCode】#12整数转罗马数字(Integer to Roman) 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...

weixin_43858604的博客 127

LeetCode 12. 整数转罗马数字 Integer to Roman

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的...

Umbrella Corporation 1万+

[LeetCode]12. Integer to Roman整数转罗马数字

Roman numerals are represented by seven different symbols:I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D ...

weixin_34194317的博客 94

LeetCode第12题思悟——整数转罗马数字(integer-to-roman)

LeetCode第12题思悟——整数转罗马数字(integer-to-roman) 文章目录LeetCode第12题思悟——整数转罗马数字(integer-to-roman)知识点预告题目要求示例我的思路其他优秀的解法差别分析知识点小结 知识点预告 获取整数确定数位上数字的方法; 映射的解题思路; 翻译“题目要求”的处理手段; 题目要求 罗马数字包含以下七种字符: I, V, X, L,C,...

博采众长,自成一派; 395

leetcode 12. Integer to Roman(整数转罗马数字)

leetcode 12

蓝羽飞鸟的博客 463

integer转int_LeetCode12.整数转罗马数字(Integer to Roman)

12. 整数转罗马数字罗马数字由以下7种不同字符表示:I, V, X, L,C,D 和 M。I 1V 5X 10L 50C 100D 500M 1000例如,罗马II表示数字2 ,即为两个并列的I。XII表示数字12 ,即...

weixin_39729840的博客 123
上一篇: LeetCode-8:String to Integer (atoi)(字符串转整数) -- Medium
下一篇: LeetCode-14:Longest Common Prefix(最长公共前缀)
大树先生的博客
博客等级 码龄9年 2692粉丝 200原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值