leetcode--integer_to_roman && roman_to_integer
来源:互联网 发布:阿里云 服务器买错了 编辑:程序博客网 时间:2024/05/29 12:36
leetcode–integer_to_roman && roman_to_integer
题意:给定一个integer,把它转化成罗马数字(本题integer的取值范围是[1, 3999])
tips
罗马数字一共由7个字符构成,分别是I(1),V(5),X(10),L(50),C(100),D(500),M(1000),能够表示的范围刚好就是[1, 3999]。本题求解需要首先了解罗马数字的构成,如1到12分别表示为:Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ、Ⅶ、Ⅷ、Ⅸ、Ⅹ、Ⅺ、Ⅻ。罗马数字对照表给出详细的罗马数字表示,读者可以自行查看了解题意。
分析: 本题载了解了罗马数字组合方式的前提下,就不是很难了,只是一个简单的对integer类型数据的处理,通过整除得到千位、十位、个位,例如我们得到个位的数字x,只要将x的值是否满足0、[1, 3]、4、[5, 8]、9几种情况分别讨论即可。
代码
代码写的比较凌乱……还请见谅
public String intToRoman(int num) { StringBuffer buffer = new StringBuffer(); int temp = num/1000; //表示几千,最大值就是3(本题范围是[1,3999]) while(temp > 0){ buffer.append("M"); temp--; } num = num % 1000; temp = num/100; //表示千位 if(temp > 0 && temp < 4){ while(temp > 0){ buffer.append("C"); temp--; } }else if(temp == 4){ buffer.append("CD"); }else if(temp > 4 && temp <= 8){ buffer.append("D"); temp -= 5; while(temp > 0){ buffer.append("C"); temp--; } }else if(temp == 9){ buffer.append("CM"); } num = num % 100; temp = num / 10; //表示十位 if(temp > 0 && temp < 4){ while(temp > 0){ buffer.append("X"); temp--; } }else if(temp == 4){ buffer.append("XL"); }else if(temp > 4 && temp <= 8){ buffer.append("L"); temp -= 5; while(temp > 0){ buffer.append("X"); temp--; } }else if(temp == 9){ buffer.append("XC"); } temp = num % 10; //表示个位 if(temp > 0 && temp < 4){ while(temp > 0){ buffer.append("I"); temp--; } }else if(temp == 4){ buffer.append("IV"); }else if(temp > 4 && temp <= 8){ buffer.append("V"); temp -= 5; while(temp > 0){ buffer.append("I"); temp--; } }else if(temp == 9){ buffer.append("IX"); } return buffer.toString(); }
源程序下载
反之,将罗马数字转换成integer
分析: 将罗马数字转换成integer时只需要着重注意IV,IX,XL,XC,CD,CM这几种情况,其他的直接转换成相应数字即可。
public int romanToInt(String s) { int sum = 0; for(int i = s.length() - 1; i >= 0; i--){ if(s.charAt(i) == 'I'){ sum += 1; }else if(s.charAt(i) == 'V'){ sum += 5; if(i-1 >= 0 && s.charAt(i-1) == 'I'){ //IV sum -= 1; i--; } }else if(s.charAt(i) == 'X'){ sum += 10; if(i-1 >= 0 && s.charAt(i-1) == 'I'){ //IX sum -= 1; i--; } }else if(s.charAt(i) == 'L'){ sum += 50; if(i-1 >= 0 && s.charAt(i-1) == 'X'){ //XL sum -= 10; i--; } }else if(s.charAt(i) == 'C'){ sum += 100; if(i-1 >= 0 && s.charAt(i-1) == 'X'){ //XC sum -= 10; i--; } }else if(s.charAt(i) == 'D'){ sum += 500; if(i-1 >= 0 && s.charAt(i-1) == 'C'){ //CD sum -= 100; i--; } }else{ sum += 1000; if(i-1 >= 0 && s.charAt(i-1) == 'C'){ //CM sum -= 100; i--; } } } return sum; }
源程序下载
0 0
- leetcode--integer_to_roman && roman_to_integer
- Leetcode:integer_to_roman
- 1th Roman_to_Integer
- 2th integer_to_roman
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- 初学51单片,写的几个小程序
- WinForm最小化到托盘以及托盘右键菜单
- 记录Intent的几种Flag
- HTTP核心模块配置静态web服务器 6-对客户端请求的限制
- 【NOIP2015】洛谷2678 跳石头
- leetcode--integer_to_roman && roman_to_integer
- Java面试题全集(上)
- HOWTO SET-UP A CRONTAB FILE
- JAVA生成文件在linux下文件名乱码
- php API 跨域请求
- MySQL基本操作
- css-03
- 数字转化为汉字金额
- Redis主从实现读写分离