13. Roman to Integer

网友投稿 880 2022-10-09

13. Roman to Integer

13. Roman to Integer

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol ValueI 1V 5X 10L 50C 100D 500M 1000

For example, two is written as II in Roman numeral, just two one’s added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

I can be placed before V (5) and X (10) to make 4 and 9. X can be placed before L (50) and C (100) to make 40 and 90. C can be placed before D (500) and M (1000) to make 400 and 900. Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.

Example 1:

Input: "III"Output: 3

Example 2:

Input: "IV"Output: 4

Example 3:

Input: "IX"Output: 9

Example 4:

Input: "LVIII"Output: 58Explanation: C = 100, L = 50, XXX = 30 and III = 3.

Example 5:

Input: "MCMXCIV"Output: 1994Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

思路: 罗马数字转成阿拉伯数字,这里面需要知道罗马数字的构成规则。罗马数字通过7个不同字母的重复或组合,能够表示出所有正整数(罗马数字中没有0)。 I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 比如:IV表示4,VI表示6,XIX表示19,XXI表示21。

可以找到规律,如果左边的字母表示的数字小于右边的字母,则用右边的数字减去左边的数字;反之,则需要进行加法。

我们从左向右进行遍历的时候,不太好计算出最终值;从另一个角度考虑,就是从右向左计算,就可以看出来了。

public class Solution { private static Map map = new HashMap() { { put('I', 1); put('V', 5); put('X', 10); put('L', 50); put('C', 100); put('D', 500); put('M', 1000); } }; public static int romanToInt(String s) { int length = s.length(); int result = 0; int preVal = 0; for (int i = length - 1; i >= 0; i--) { char key = s.charAt(i); int value = map.get(key); if (value >= preVal) { result += value; } else { result -= value; } preVal = value; } return result; }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序开发示例(微信小程序开发入门及案例详解 pdf)
下一篇:详解netty中的frame解码器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~