标签:
题目:
Given a roman numeral, convert it to an integer.
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)。 按照下面的规则可以表示任意正整数。
重复数次:一个罗马数字重复几次,就表示这个数的几倍。
右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。
但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。
加线乘千:在一个罗马数字的上方加上一条横线或者在右下方写M,表示将这个数字乘以1000,即是原数的1000倍。同理,如果上方有两条横线,
即是原数的1000000倍。
代码实现:
public static int romanToInt(String s) { char[] cs = s.toCharArray();// 变成char数组 int result = 0; for (int i = 0; i < cs.length; i++) { if (i + 1 < cs.length) { if (oneRomanToInt(cs[i]) < oneRomanToInt(cs[i + 1])) {// 规则:大的小的在前面为负数 result -= oneRomanToInt(cs[i]); } else { result += oneRomanToInt(cs[i]); } } else {// 把最后一个加上 result += oneRomanToInt(cs[i]); } } return result; } public static int oneRomanToInt(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; default: return 0; } }
总体来说这个比较简单,但是要注意小数在大数前面是负数!!!
leetcode修炼之路——13. Roman to Integer
标签:
原文地址:http://www.cnblogs.com/mc-ksuu/p/5782312.html