学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题。

官方链接:https://leetcode-cn.com/problemset/all/

一、题意

难度:中等

https://leetcode-cn.com/problems/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 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。

  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

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

示例

输入: 3
输出: "III"
输入: 4
输出: "IV"
输入: 9
输出: "IX"
输入: 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
输入: 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= num <= 3999

二、解题

方法一:贪心

思路:

将给定的整数转换为罗马数字需要的序列分别按照从大到小进行排列。根据符号值进行累加操作。

代码:

class Solution {
public String intToRoman(int num) {
// 定义罗马数字与对应整数值
int[] nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] str = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
StringBuilder sb = new StringBuilder();
int i = 0;
// 依次对整数进行转换
while(num > 0){
// 获取对应的罗马数字
while(num >= nums[i]){
sb.append(str[i]);
num -= nums[i];
}
// 没有符合的则向后移动,找下一个最大值进行匹配
++i;
}
// 返回结果
return sb.toString();
}
}

复杂度分析:

  • 时间复杂度:O(1)

  • 空间复杂度:O(1)

这里有两个我收集的学习资源,小伙伴们有需要的自提哦,如果可以的话顺便给我点个start,谢谢~

计算机类电子书籍仓库:https://github.com/unidentifiable/java-other-books

Java学习相关视频参考:https://github.com/unidentifiable/java_learning_circuit

最新文章

  1. php实现设计模式之 原型模式
  2. shell-bash学习01基础、打印、环境变量
  3. SQL 2005 日志损坏的恢复方法
  4. js 如何将无限级分类展示出来
  5. 安装完oracle重新启动后报ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务(重启前正常)
  6. 学习用CMake来编写Qt程序
  7. view添加阴影无效
  8. unity -- Time类(持续更新中)
  9. Scrum笔记
  10. windows系统如何安装运行filebeat
  11. POJ - 3264 线段树模板题 询问区间最大最小值
  12. 修改mysql 数据库编码
  13. 设置Linux中的Mysql不区分表名大小写
  14. 菜鸟教程之工具使用(一)——Git的基本使用
  15. Unreal Engine 4 性能优化工具(Profiler Tool)
  16. 【BZOJ3470】Freda’s Walk 概率与期望
  17. go环境变量配置liteide配置
  18. java GC是在什么时候,对什么东西,做了什么事情?
  19. HDU 4081—— Qin Shi Huang&#39;s National Road System——————【次小生成树、prim】
  20. 图说不为人知的IT传奇故事-2-IBM咬不动的胡桃

热门文章

  1. Windows Server 2012 R2 英文版汉化安装中文语言包教程更改为中文版
  2. Maven 知识点总结以及解决jar报冲突的几种方法
  3. php artisan db:seed 报错
  4. Avoid catching exceptions inside atomic! You may need to manually revert model state when rolling back a transaction. 避免异常程序不抛错误 回滚 导致 自增id不连续。
  5. (Oracle)DDL及其数据泵导入导出(impdp/expdp)
  6. 初始TypeScript
  7. LOJ10013曲线
  8. SpringMVC听课笔记(十三:使用拦截器)
  9. Prometheus-process exporter-进程监控
  10. Spark高级数据分析——纽约出租车轨迹的空间和时间数据分析