LeetCode 13.罗马数字转整数 roman-to-integer
LeetCode 13.罗马数字转整数 roman-to-integer罗马数字包含以下七种字符:IVXLCD和M。字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如 罗马数字2写做II即为两个并列的 1 。12写做XII即为XII。27写做XXVII, 即为XXVII。通常情况下罗马数字中小的数字在大的数字的右边。但也存在特例例如 4 不写做IIII而是IV。数字 1 在数字 5 的左边所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地数字 9 表示为IX。这个特殊的规则只适用于以下六种情况I可以放在V(5) 和X(10) 的左边来表示 4 和 9。X可以放在L(50) 和C(100) 的左边来表示 40 和 90。C可以放在D(500) 和M(1000) 的左边来表示 400 和 900。给定一个罗马数字将其转换成整数。示例 1:输入: s III 输出: 3示例 2:输入: s IV 输出: 4示例 3:输入: s IX 输出: 9示例 4:输入: s LVIII 输出: 58 解释: L 50, V 5, III 3.示例 5:输入: s MCMXCIV 输出: 1994 解释: M 1000, CM 900, XC 90, IV 4.提示1 s.length 15s仅含字符(I, V, X, L, C, D, M)题目数据保证s是一个有效的罗马数字且表示整数在范围[1, 3999]内题目所给测试用例皆符合罗马数字书写规则不会出现跨位等情况。IL 和 IM 这样的例子并不符合题目要求49 应该写作 XLIX999 应该写作 CMXCIX 。方法哈希表importjava.util.HashMap;importjava.util.Map;classSolution{publicintromanToInt(Strings){MapCharacter,IntegerhashmapnewHashMap();hashmap.put(I,1);hashmap.put(V,5);hashmap.put(X,10);hashmap.put(L,50);hashmap.put(C,100);hashmap.put(D,500);hashmap.put(M,1000);intns.length();intsum0;for(inti0;in;i){intvaluehashmap.get(s.charAt(i));if(in-1valuehashmap.get(s.charAt(i1))){sum-value;}else{sumvalue;}}returnsum;}}//时间复杂度O(n)//空间复杂度O(1)