leetcode13. Roman to Integer

心想用python里的dist会很简单,于是找了c++里面有没有类似的东西,找到了map,于是借此学习了一下c++里面的map的操作。find()返回迭代器。

    map<string,int> cmap;  
    cmap["op1"] = 1;  
    cmap["op2"] = 2;  
    string str = "samy";  
    cmap.insert(make_pair(str,3));  
  
//  for(map<string,int>::iterator ite = cmap.begin(); ite!=cmap.end();++ite)  
//  {  
//      cout<<ite->first<<" "<<ite->second<<endl;  
//  }  
    //cout<<cmap.count("Annaa")<<endl;  
    map<string,int>::iterator key = cmap.find("Anna");  
    if(key!=cmap.end())  
    {  
        cout<<key->second<<endl;  
    }


代码:

class Solution {
public:
    int romanToInt(string s) {
        map<char, int> singleTable;
        map<string, int> doubleTable;
        singleTable.insert(pair<char, int>('I', 1));
        singleTable.insert(pair<char, int>('V', 5));
        singleTable.insert(pair<char, int>('X', 10));
        singleTable.insert(pair<char, int>('L', 50));
        singleTable.insert(pair<char, int>('C', 100));
        singleTable.insert(pair<char, int>('D', 500));
        singleTable.insert(pair<char, int>('M', 1000));
        doubleTable.insert(pair<string, int>("IV", 4));
        doubleTable.insert(pair<string, int>("IX", 9));
        doubleTable.insert(pair<string, int>("XL", 40));
        doubleTable.insert(pair<string, int>("XC", 90));
        doubleTable.insert(pair<string, int>("CD", 400));
        doubleTable.insert(pair<string, int>("CM", 900));
        int i = 0;
        int n = 0;
        while (i < s.length()-1) {
            map<char, int>::iterator key1 = singleTable.find(s[i]);
            map<char, int>::iterator key2 = singleTable.find(s[i+1]);
            if (key1->second < key2->second) {
                string pair = "";
                pair += s[i];
                pair += s[i + 1];
                map<string, int>::iterator key3 = doubleTable.find(pair);
                n += key3->second;
                i += 2;
            }
            else {
                n += key1->second;
                i++;
            }
        }
        if (i == s.length() - 1) {
            map<char, int>::iterator key4 = singleTable.find(s[i]);
            n += key4->second;
        }
        return n;
    }

};




虽然效率不高。但是提交一次就accept。


哇看到一个也是用map的更好的解法,我一开始也想到过,只是不知道那个快,看这个代码量写起来比我的少。放到leetcode里运行了一下,果然快好多!!直接击败60%选手。原来map的查找不一定要用迭代器???

class Solution {  
public:  
    int romanToInt(string s) {  
        // Note: The Solution object is instantiated only once and is reused by each test case.  
        int result=0;  
          
        map<char,int> roman;  
        roman['I']=1;  
        roman['V']=5;  
        roman['X']=10;  
        roman['L']=50;  
        roman['C']=100;  
        roman['D']=500;  
        roman['M']=1000;  
          
        for(int i=s.length()-1;i>=0;i--)  
        {  
            if(i==s.length()-1)  
            {  
                result=roman[s[i]];  
                continue;  
            }  
            if(roman[s[i]] >= roman[s[i+1]])  
                result+=roman[s[i]];  
            else  
                result-=roman[s[i]];  
        }  
        return result;  
    }  
}; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值