题目描述

给定一个整数,将其转换成罗马数字。例如, 罗马数字 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。

分析

通过罗马数字的特征可以得到13种罗马数字与阿拉伯数字的映射关系

1000,900,500,400,100,90,50,40,10,9,5,4,1
"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"

对应上面的映射规则罗马数字的成型规律就是从左往右的字符,对应的大小关系是从大到小,全部相加在一起就是对应的阿拉伯数字。
那么就可以将输入的数字num每次减去不大于num的最大数,直到num减为0,每一次相减都拼接一个对应的罗马数字。当num为0的时候拼接出来的字符串就是我们想要得到的罗马数字。

代码实现

package org.kk.java.march;/*** <p>* 整数转罗马数字* </P>** @author Kk* @since 2022/3/26 10:30*/
public class Q012 {public static void main(String[] args) {System.out.println(intToRoman(3999));}public static String intToRoman(int num) {String romanNum = "";int[] nums = {1000,900,500,400,100,90,50,40,10,9,5,4,1};String[] romans = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};for (int i = 0; i < nums.length; i++) {while (nums[i] <= num) {num = num - nums[i];romanNum = romanNum.concat(romans[i]);}if (num == 0) break; //当num减为0的时候字符串拼接结果就是最终结果了,此时就可以结束循环}return romanNum;}
}

结果为:MMMCMXCIX

Java算法——整数转罗马数字(LeetCode第12题)相关推荐

  1. Java算法——爬楼梯(LeetCode第70题)

    问题描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 分析 题目中给出,上台阶的方式只有两种,一种为一步跨一阶,一种为 ...

  2. Java算法——翻转二叉树(LeetCode第226题)

    问题描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点. 示例 分析 自顶向下递归交换每个结点的左右子树,便可将整棵树翻转. 代码实现 class Solution {publi ...

  3. 12.整数转罗马数字-LeetCode

    1. 问题描述 这里直接采用的是leetcode上面的问题描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做  ...

  4. LeetCode第12题 整数转罗马数字

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

  5. JS算法-整数转罗马数字

    回顾前言中列出的这 13 个符号,可以发现: 千位数字只能由M 表示: 百位数字只能由C,CD,D 和CM 表示: 十位数字只能由X,XL,L 和XC 表示: 个位数字只能由I,IV,V 和IX 表示 ...

  6. LeetCode:整数转罗马数字

    刷题神器:LeetCode官方网站 一.题目还原 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100 ...

  7. [Leetcode][第78题][JAVA][子集][位运算][回溯]

    [问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...

  8. Leetcode算法Java全解答--12. 整数转罗马数字

    Leetcode算法Java全解答–12. 整数转罗马数字 文章目录 Leetcode算法Java全解答--12. 整数转罗马数字 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 ...

  9. LeetCode (12.整数转罗马数字)JAVA StringBuffer

    LeetCode (12.整数转罗马数字)JAVA StringBuffer 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 1 ...

最新文章

  1. PHP自动加载类—__autoload()和spl_autoload_register()
  2. WorkFlow入门Step.4—Adding Procedural Elements-For-WF4.0-(续)
  3. Dubbo发展史谁知道?
  4. 如何让SD-WAN超越MPLS?
  5. python elif 用法_Python入门高级教程--Python 条件语句
  6. 自己动手搭建Git服务器-SCM-Manager
  7. 数据如何导入oracle数据库,如何用Oracle导入导出工具来实现Oracle数据库移植?
  8. Java中各种整形类型可以表示的范围
  9. 从客户端检测到有潜在危险的Request.Form 值
  10. 通过ICE轻松部署WES7镜像
  11. 宝塔面板windows建站教程_宝塔面板建站教程
  12. 《基于卷积神经网络(CNN)的网络流量分类》优秀本科毕设实验总结
  13. phpnow mysql_phpnow重新安装mysql数据库的方法
  14. 用python开发的运维管理系统_python运维开发常用模块(一)psutil
  15. CAD中插入外部参照字体会变繁体_CAD绘图外部参照的使用方法
  16. 群晖、黑群晖安装emby很慢,或者卡0%的解决办法,请收藏
  17. PLSQL无法粘贴复制
  18. 基于MediaPipe的AI虚拟鼠标
  19. 2020-11-17 胸口碎大石般的徒手冒泡排序
  20. 1445. 苹果和桔子

热门文章

  1. 设计模式(一) 工厂模式 五种写法总结
  2. 轻松解决keil4跟keil5在同一个系统下不能共存的问题
  3. 一般能ping通自己的IP ,但是ping 不通网关,也ping不通别的主机IP
  4. 网页的linke rel=icon详解 favicon深究
  5. android连接otg摄像头,Android系统OTG_usb链接摄像头的驱动和使用
  6. Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)
  7. 爆炸的符卡洋洋洒洒<每日一题>(01背包变种)
  8. 书法拓片matlab,拓墨书法作品(拓片)的具体操作方法和步骤?
  9. 顺丰速运——深圳大数据部一面(18分钟)
  10. xampp 可道云_Windows下用kodexplorer可道云在本地搭建私有云的步骤