[leet code] Roman to Integer
2014-01-07 06:38
423 查看
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
看着roman numeral是一头雾水, google过后知道是罗马数字, 就是I, II, III, IV, V, VI, VII, VIII, IX, X... 写report的时候有用到可是鬼知道有神马规律! 于是这题连思考的时间都省了, 只能上网找答案.
计数规则:
相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
正常使用时,连续的数字重复不得超过三次
在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则)
换句话说要转罗马数字为int, 我们需要逐位读取罗马数字, 如果当前位比前一位小, 将当前位加入总数当中; 如果当前为比前一位大, 则1. 减去前一位(前一次处理时架上的)对应数字 2. 加入位对应数字 3. 减去前一位对应数字(按照罗马数字规则). => total = total + currentNumber - 2*previousNumber. <-key point
Input is guaranteed to be within the range from 1 to 3999.
看着roman numeral是一头雾水, google过后知道是罗马数字, 就是I, II, III, IV, V, VI, VII, VIII, IX, X... 写report的时候有用到可是鬼知道有神马规律! 于是这题连思考的时间都省了, 只能上网找答案.
计数规则:
相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
正常使用时,连续的数字重复不得超过三次
在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则)
换句话说要转罗马数字为int, 我们需要逐位读取罗马数字, 如果当前位比前一位小, 将当前位加入总数当中; 如果当前为比前一位大, 则1. 减去前一位(前一次处理时架上的)对应数字 2. 加入位对应数字 3. 减去前一位对应数字(按照罗马数字规则). => total = total + currentNumber - 2*previousNumber. <-key point
public class Solution { public int romanToInt(String s) { int pre = 0; int cur = 0; int total = charToInt(s.charAt(0)); for(int i=1; i<s.length(); i++){ pre = charToInt(s.charAt(i-1)); cur = charToInt(s.charAt(i)); if(cur<=pre) total+=cur; else total = total+cur-2*pre; } return total; } public int charToInt(char a){ int data = 0; switch (a){ case 'I': data = 1; break; case 'V': data = 5; break; case 'X': data = 10; break; case 'L': data = 50; break; case 'C': data = 100; break; case 'D': data = 500; break; case 'M': data = 1000; break; } return data; } }
相关文章推荐
- [leet code] Integer to Roman
- Leet Code 13 Roman to Integer - 罗马数字转成整数 - Java
- Leet Code 12 Integer to Roman - 整数转成罗马数字 - Java
- Leet Code 12 & 13 Integer <---> Roman
- 【Leet Code】String to Integer (atoi) ——常考类型题
- Lettcode_13_Roman to Integer——罗马数字转变算法
- LEEDCODE 12 Integer to Roman (JAVA题解)
- Lettcode_12_Integer to Roman
- CODE 118: Roman to Integer
- 【Leet Code】String to Integer (atoi) ——常考类型题
- lintcode :Integer to Roman 整数转罗马数字
- leatcode 13,Roman to Integer
- CODE 119: Integer to Roman
- LeedCode Integer to Roman
- Leet Code 8 String to Integer - 字符串转整数 - Java
- [leedcode oj 13]Roman to Integer
- Leet Code 8 String to Integer (atoi)
- LEEDCODE 13 Roman to Integer (JAVA题解)
- LeetCode12~14 Integer to Roman/Roman to Integer/Longest Common Prefix
- LeetCode-12:Integer to Roman