lintcode -- 罗马数字转整数

来源:互联网 发布:dnf辅助官网源码 编辑:程序博客网 时间:2024/05/05 07:56

给定一个罗马数字,将其转换成整数。

返回的结果要求在1到3999的范围内。

说明

什么是 罗马数字?

  • 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




/*
思路:
1.先建立一个map存入一些罗马符号对应的数字
2.先求出字符串最后一个罗马字符对应的数字res
3.从后开始遍历,如果后一个罗马符号大于前一个,则为res减去前一个罗马对应数字
如果后小于前,则加上
*/
public class Solution {
  public int romanToInt(String s) {
   if (s == null || s.length()==0) {
                return 0;
   }
   Map<Character, Integer> m = new HashMap<Character, Integer>();
   m.put('I', 1);
   m.put('V', 5);
   m.put('X', 10);
   m.put('L', 50);
   m.put('C', 100);
   m.put('D', 500);
   m.put('M', 1000);
   
   int length = s.length();
   //已经求出最后一个罗马数表示的整数
   int res = m.get(s.charAt(length - 1));
   //从尾到头遍历
   for (int i = length - 1; i >= 1; i--) {
       //VI  如果1<5
       if (m.get(s.charAt(i)) <= m.get(s.charAt(i-1))) {
           res += m.get(s.charAt(i-1));
       //IV 如果5>1
       } else {
           res -= m.get(s.charAt(i-1));
       }
   }
   return res;
}
}