LeetCode|LeetCode 12 Integer to Roman(整型数到罗马数)
翻译
给定一个整型数值,将其转换到罗马数字。输入被保证在1到3999之间。
原文
Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.
【LeetCode|LeetCode 12 Integer to Roman(整型数到罗马数)】我不会告诉你一开始我是用的无数个变量和if……
后来实在受不了这么多变量就将其写成了枚举,那么接下来就迎刃而解了。
为了让大家理解罗马数是怎么计数的,这里我截了一张图,具体的大家可以自行用微软Bing搜索。
文章图片
那么代码我就先贴出来了:
public class Solution
{
public string IntToRoman(int num)
{
string result = "";
Type R = typeof(Roman);
foreach (var r in Enum.GetNames(R).Reverse())
{
while (num >= int.Parse(Enum.Format(R, Enum.Parse(R, r), "d")))
{
result += r.ToString();
num -= int.Parse(Enum.Format(R, Enum.Parse(R, r), "d"));
}
}
return result;
}
}
public enum Roman
{
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
};
今天晚些时候我会将 C# 枚举的一些用法贴到博客上,不了解的同学敬请关注。
除了枚举的用法外,我认为这道题中需要你去认真了解这些罗马数的规则,也就是说记得将9和4这种数也添加到枚举中哦。
那么在IntToRoman中都中都在做些什么呢?
- 搭配Type和typeof新建出来R
- 用foreach遍历枚举中的所有元素
- 切记要加上Reverse(),至于为什么,大家试试不加就知道了
- 如果num比枚举中的数字大,则将其对应的字符串(比如说”M”)添加到result中
- 最后在num中减掉刚才已经用过的数字,数字也通过枚举来获取
- 最后返回result
下一道题还是关于罗马数的,不过是从罗马数转换成整型数,欢迎大家访问:传送门:LeetCode 13 Roman to Integer(罗马数到整型数) 。
推荐阅读
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- leetcode|leetcode 92. 反转链表 II
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- LeetCode(03)Longest|LeetCode(03)Longest Substring Without Repeating Characters
- Leetcode|Leetcode No.198打家劫舍
- [leetcode数组系列]1两数之和
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- LeetCode|LeetCode 876. 链表的中间结点