p71 罗马数字转整数(leetcode 13)
一:解题思路
1.如果当前的罗马数字是字符串中最后一个字符,或者当前的罗马数字大于等于它右边的罗马数字,那么就加上当前的罗马数字对应的数值。
2.如果当前的罗马数字小于它右边的罗马数字,那么就减去当前的罗马数字对应的数值。
在这里需要一个数组来存储7个罗马数字和阿拉伯数字之间的转换,但不管在任何情况下,只需要7个这样的转换,所以可以认为空间复杂度为:O(1),所以:Time:O(n),Space:O(1)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: int romanToInt(string s) { int tagVal[128]; tagVal['I'] = 1; tagVal['V'] = 5; tagVal['X'] = 10; tagVal['L'] = 50; tagVal['C'] = 100; tagVal['D'] = 500; tagVal['M'] = 1000; int val = 0; for (int i = 0; i < s.length(); i++) { if (i + 1 >= s.length() || tagVal[s[i]] >= tagVal[s[i+1]]) { val += tagVal[s[i]]; } else { val -= tagVal[s[i]]; } } return val; } };
Java:
class Solution { private static final int[] tagVal=new int[256]; static { tagVal['I']=1; tagVal['V']=5; tagVal['X']=10; tagVal['L']=50; tagVal['C']=100; tagVal['D']=500; tagVal['M']=1000; } public int romanToInt(String s) { int val=0; for(int i=0;i<s.length();i++) { if(i+1>=s.length() || tagVal[s.charAt(i)]>=tagVal[s.charAt(i+1)]) { val+=tagVal[s.charAt(i)]; } else { val-=tagVal[s.charAt(i)]; } } return val; } }

浙公网安备 33010602011771号