Google算法题:M-罗马数字与整数互转
2017-08-20 11:32
393 查看
罗马转整数
http://www.lintcode.com/zh-cn/problem/roman-to-integer/给定一个罗马数字,将其转换成整数。
返回的结果要求在1到3999的范围内。
您在真实的面试中是否遇到过这个题?
Yes
说明
什么是 罗马数字?
https://en.wikipedia.org/wiki/Roman_numerals
https://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97
http://baike.baidu.com/view/42061.htm
样例
IV->
4
XII->
12
XXI->
21
XCIX->
99
public class Solution { /* * @param s: Roman representation * @return: an integer */ Map<Character, Integer> map = new HashMap<Character, Integer>(); public Solution(){ initRomanMap(); } //TC = O(n) public int romanToInt(String s) { if(s==null) return 0; int n = s.length(); int res=0; for(int i=0; i<n; i++){ int cur = map.get(s.charAt(i)); int follow = 0; if(i!=n-1) follow = map.get(s.charAt(i+1)); if(cur<follow){ res+=follow-cur; i++; }else{ res+=cur; } } return res; } public void initRomanMap(){ //Symbol I V X L C D M //Value 1 5 10 50 100 500 1,000 map.put('I', 1); map.put('V', 5); map.put('X', 10); map.put('L', 50); map.put('C', 100); map.put('D', 500); map.put('M', 1000); } };
整数转罗马
http://www.lintcode.com/zh-cn/problem/integer-to-roman/#给定一个整数,将其转换成罗马数字。
返回的结果要求在1-3999的范围内。
您在真实的面试中是否遇到过这个题?
Yes
说明
什么是 罗马数字?
https://en.wikipedia.org/wiki/Roman_numerals
https://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97
http://baike.baidu.com/view/42061.htm
样例
4->
IV
12->
XII
21->
XXI
99->
XCIX
更多案例,请戳 http://literacy.kent.edu/Minigrants/Cinci/romanchart.htm
public class Solution {
/*
* @param s: Roman representation
* @return: an integer
*/
public String intToRoman1(int num) {
StringBuffer res = new StringBuffer("");
int[] values = new int[]{1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] romans = new String[]{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int n = values.length;
for(int i=0; i<n; i++){
int k = num/values[i];
while(k>0){
res.append(romans[i]);
k--;
}
num = num%values[i];
}
return res.toString();
}
public String intToRoman(int num) {
String[] M = new String[]{"","M","MM","MMM"};
String[] C = new String[]{"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
String[] X = new String[]{"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
String[] I = new String[]{"","I","II","III","IV","V","VI","VII","VIII","IX"};
return M[num/1000]+C[num%1000/100]+X[num%1000%100/10]+I[num%1000%100%10];
}
};
相关文章推荐
- leetcode 罗马数字与整数的转换算法
- leetcode 罗马数字与整数的转换算法
- C++之整数转化为罗马数字(11)---《那些奇怪的算法》
- 简单的算法问题6——罗马数字转换成整数
- 【简单算法】43.罗马数字转整数
- 【LeetCode-面试算法经典-Java实现】【013-Roman to Integer (罗马数字转成整数)】
- 计蒜客 挑战难题 第13题:整数转换成罗马数字
- 计蒜客整数转换成罗马数字
- Java - 计蒜客 - 罗马数字转换成整数
- lintcode-罗马数字转整数-419
- LeetCode 12 Integer to Roman (整数转罗马数字)
- 罗马数字转换成整数
- lintcode-419-罗马数字转整数
- 整数转换为罗马数字
- 整数转换成罗马数字java实现
- 算法:有一串整数,这串数字数字不定,共N个,求出其中出现次数最多的数字
- 写一个算法实现在一个整数数组中,找出第二大的那个数字。
- 计蒜客————罗马数字转换成整数
- Roman to Integer 罗马数字转化成整数
- 整数转换与罗马数字的相互转换