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;
        }
    }

 

posted @ 2020-04-02 17:16  repinkply  阅读(152)  评论(0)    收藏  举报