LeetCode题目,12. Integer to Rooman
先看题目描述
大意就是给定一个整数,让我们将其转为罗马数字
算法和思路
哈希表
大致思路就是先用一个哈希表将各整数对应的罗马数字储存起来,然后从左到右一层层的转化为罗马数字
算法流程如下:
- 先计算出整数的长度 len
- 令 i 从 len - 1 到 0 进行 len -1 次循环:
- 令 con 等于 10 的 len - 1 次方,cur = num / con
- 若 cur 等于 4 或 9,则直接在 res 后添加 con × cur 对应的罗马字符
- 否则:
- 若 cur 大于等于 5,则先在 res 后添加 con × 5 对应的罗马字符,再将 cur - 5
- 在 res 后添加 cur 个 con 对应的罗马字符
- num = num % con
- 最终返回 res
贪心算法
这题的背景类似找零钱问题,罗马数字与阿拉伯数字的对应关系从大到小排列如下图所示
于是,“将整数转换为罗马数字”的过程,就是用上面这张表中右边的数字作为“加法因子”去分解一个整数,目的是“分解的整数个数”尽可能少,因此,对于这道问题,类似于用最少的纸币凑成一个整数,贪心算法的规则如下:
每一步都使用当前较大的罗马数字作为加法因子,最后得到罗马数字表示就是长度最少的。
算法源码
哈希表
1 | import java.util.*; |
贪心算法
1 | class Solution { |