Leetcode简单题罗马数字转整数

来源:互联网 发布:淘宝客导购推广位 编辑:程序博客网 时间:2024/06/05 08:11

题目来源:https://leetcode.com/problems/roman-to-integer/description/

题目简单描述:要求输入[1,3999]范围的罗马数字,能转换成整数输出。

题目分析:

罗马数字罗马数字IVXLCDM整数1510501005001000

规则:

  1. 相同的数字连写表示这些数字相加,如III表示3    
  2. 小的数字在大的数字左边,表示大的数字减去小的数字如IV表示数字4
  3. 小的数字在大的数字右边,表示全部相加,如VII表示为7
  4. 在一个数字上面画一条横线表示这个数字本身的值乘以1000,(此题中这种情况不予考虑)   

解题思路:

从左往右按字符扫描,若当前字符数值大于或者等于他后面的字符数值,则sum=sum+此字符的值,否则,sum = sum-此字符的值
对于最后一个字符,都是加在sum上的。
代码:
class Solution { public int romanToInt(String s) {        char[] roman = s.toCharArray();        int sum = 0;        int s1 =0,s2=0;Map<Character, Integer> m  = new HashMap<Character,Integer>(){{        put('I', 1);        put('V', 5);        put('X', 10);        put('L', 50);        put('C', 100);        put('D', 500);        put('M', 1000);        }};        for (int i = 0; i < roman.length-1; i++) {        s1 = (int)m.get(roman[i]);        s2 = (int)m.get(roman[i+1]);if (s1>=s2) {sum = sum +s1;}else {sum = sum-s1;}}        sum += (int)m.get(roman[roman.length-1]);        return sum;    }}


原创粉丝点击