Integer to Roman
来源:互联网 发布:梅宏 大数据系统软件 编辑:程序博客网 时间:2024/06/17 16:30
1.题目
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
科普了一下表达方式,理解了就不复杂了。I = 1;
V = 5;
X = 10;
L = 50;
C = 100;
D = 500;
M = 1000;
2.算法
算法一,直接打表,然后就是贪心的做法,每次选择能表示的最大值,把对应的字符串连起来。
public String intToRoman(int num) {String str;string symbol[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};int value[]= {1000,900,500,400, 100, 90, 50, 40, 10, 9, 5, 4, 1};for (int i = 0; num != 0; i++){while (num >= value[i]){num -= value[i];str += symbol[i];}}return str;}
算法二:只要搞清楚每个数字在每个位置应该如何表示就可以,罗马数字对于每个位有三个单位:1,5,10,对于1到9,表示方法如下:
1-3:用1表示;
4:1:5左边加一个1;
5: 直接用5表示;
6-8: 5右边加相应的1;
9: 10左边加一个1。
以下的代码用一个函数来对某一个位用相应的1,5,10进行转换,然后求出每一位依次转换得到结果,因为知道不会超过4000,所以直接求4位出来,算法时间复杂度是O(整数的位数),空间复杂度是O(1)。
public String intToRoman(int num) { if(num<1 || num>3999) return ""; int digit = 1000; ArrayList<Integer> digits = new ArrayList<Integer>(); while(digit>0) { digits.add(num/digit); num %= digit; digit /= 10; } StringBuilder res = new StringBuilder(); res.append(convert(digits.get(0),'M',' ', ' ')); res.append(convert(digits.get(1),'C','D', 'M')); res.append(convert(digits.get(2),'X','L', 'C')); res.append(convert(digits.get(3),'I','V', 'X')); return res.toString(); }//找到数子所对应的位置public String cover(int digit, char one, char five, char ten){StringBuilder str = new StringBuilder();switch (digit) {case 9:str.append(one);str.append(ten);break;case 8:case 7:case 6:case 5:str.append(five);for (int i = 5; i < digit; i++){str.append(one);}break;case 4:str.append(one);str.append(five);break;case 3:case 2:case 1:for (int i = 1; i <= digit; i++){str.append(one);}break;default:break;}return str;}
0 0
- Integer to Roman & Roman to Integer
- Integer to Roman & Roman to Integer
- LeetCode Roman to Integer && Integer to Roman
- 【leetcode】Roman to Integer | Integer to Roman
- Leetcode - "Roman to Integer" & "Integer to Roman"
- LeetCode:Roman to Integer,Integer to Roman
- Integer to Roman and Roman to Integer
- LeetCode Integer to Roman & Roman to Integer
- Roman to Integer/Integer to Roman
- leetcode - roman to integer & integer to roman
- "Roman to Integer" and "Integer to Roman"
- Roman to Integer &&Integer to Roman
- Roman to Integer and Integer to Roman
- Roman to Integer/Integer to Roman
- LeetCode:Roman to Integer
- LeetCode: Integer to Roman
- LeetCode: Roman to Integer
- LeetCode Integer to Roman
- DVWA-1.9全级别教程之CSRF
- 从c++中理解java的继承关系
- 创建vue项目
- 使用PullToRefresh实现下拉刷新和分页加载功能
- android 面试知识点
- Integer to Roman
- SQL注入的一个简单实例
- Java 遍历Map集合
- AJAX
- Server笔记
- HTML标签marquee
- ajax _two
- 软件工程毕业5年坎坷路途
- spring_guide