Leetcode 13. Roman to Integer & 12. Integer to Roman
来源:互联网 发布:mac root mima 编辑:程序博客网 时间:2024/05/22 11:57
13. Roman to Integer
Total Accepted: 107560 Total Submissions: 254961 Difficulty: EasyGiven a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Hide Similar Problems
思路:
参考这里。
从前往后扫描,用一个临时变量记录分段数字。如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如IV = 5 – 1 代码中从左到右,I已经被加了一次,所以要减去两倍否则,将当前值加入到结果中,然后开始下一段记录。比如VI = 5 + 1, II=1+1
public class Solution { // 7个月前8ms, 现在提交108ms.. public int romanToInt(String s){ char[] ss = s.toCharArray(); int res = convert(ss[0]); for (int i =1; i<ss.length;i++) if (convert(ss[i-1]) < convert(ss[i])){ res = res + convert(ss[i]) - 2* convert(ss[i-1]); }else{ res += convert(ss[i]); } return res; } int convert(char c){ switch (c){ case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; } return 0; }}
12. Integer to Roman
Total Accepted: 78984 Total Submissions: 190010 Difficulty: MediumGiven an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
Hide Similar Problems
思路:
参考这里。
I: 1V: 5X: 10L: 50C: 100D: 500M: 1000字母可以重复,但不超过三次,当需要超过三次时,用与下一位的组合表示:I: 1, II: 2, III: 3, IV: 4C: 100, CC: 200, CCC: 300, CD: 400s = 39783978/1000 = 3: MMM978>(1000-100), 998/900 = 1: CM78<(100-10), 78/50 = 1 :L28<(50-10), 28/10 = XX8<(100-1), 8/5 = 1: V3<(5-1), 3/1 = 3: IIIret = MMMCMLXXVIII所以可以将单个罗马字符扩展成组合形式,来避免需要额外处理类似IX这种特殊情况。I: 1IV: 4V: 5IX: 9X: 10XL: 40L: 50XC: 90C: 100CD: 400D: 500CM: 900M: 1000
解法一:
public class Solution { // public String intToRoman(int num) { String[][] table = { {"","I","II","III","IV","V","VI","VII","VIII","IX"}, // 0-9 {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}, // 0,10,20,....,90 {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}, // 0,100,200,...,900 {"","M","MM","MMM",} // 0,1000,2000,3000 }; String res = ""; int digit = 0; while(num > 0 ){ int remain = num % 10; res = table[digit][remain] + res; digit++; num /= 10; } return res; }}
解法二:
public class Solution { public String intToRoman(int num) { StringBuilder sb = new StringBuilder(); // result String[] str = new String[] { "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 = num - value[i]; sb.append(str[i]); } } return sb.toString(); }}
0 0
- LeetCode 12. Integer to Roman & 13. Roman to Integer
- 【LeetCode】13. Roman to Integer && 12. Integer to Roman
- Leetcode 13. Roman to Integer & 12. Integer to Roman
- 【LeetCode】13. Roman to Integer && 12. Integer to Roman
- Leetcode #12. Integer to Roman & #13. Roman to Integer
- LeetCode 13. Roman to Integer和12. Integer to Roman
- LeetCode-12. Integer to Roman-13. 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
- LeetCode Integer to Roman & Roman to Integer
- leetcode - roman to integer & integer to roman
- LeetCode 12. Integer to Roman
- [LeetCode]12.Integer to Roman
- LeetCode --- 12. Integer to Roman
- [Leetcode] 12. Integer to Roman
- [leetcode] 12.Integer to Roman
- 欢迎使用CSDN-markdown编辑器
- CUDA ---- Stream and Event
- python使用多进程或者多线程
- 电路设计_为什么晶振的频率是32.768kHz?
- 【OpenGL】理解glClear函数
- Leetcode 13. Roman to Integer & 12. Integer to Roman
- BlueMix cf push error
- Socket编程基本概念----imooc(2)
- Dubbo架构设计详解
- 工具类与工具函数(一)—— NextPrime
- 【58.75%】【BZOJ 1087】[SCOI2005]互不侵犯King
- github---新手教程
- 前端开发布局技巧汇总
- Linux-awk及内置变量