2019-05-08失踪人口回归了想到这个是和鸭子的约定现在就剩他一个人在坚持了不行啊我也要陪他一起坚持一起进步虽然我们很久没有背过单词了嘻嘻今晚看能不能补上啦啦啦一碗葱油拌面果然不够吃晚上加酸奶嘻嘻

大家好(大家=鸭子)!!我肥来了!

更新CSDN是和鸭子做好的约定,说好一起学习到白头,他却偷偷去揩油!嘤嘤嘤!所以不管我学了什么,我要总结一下!

今天开始刷LeetCode,然后是那道电话号码的题,能感到明显的 进步就是,有点思路,更准确的说是,知道自己哪里不会,督促我去学习,于是我无数次打开“如何使用map”“vector怎么用”之类的网站……emmmmm还是记不住那些函数,今天第一次用map,也算是初步了解了!虽然还是有问题,叹气……

贴个错误代码!

class Solution {
public:
    vector<string> letterCombinations(string digits) 
    {
        int l=digits.size();
        vector<string> str;
        vector<string> ans;
        vector<string> rec;
        if(digits == "") 
            return rec;
        map<int, string> numlet; 
        numlet.insert(pair<int,string>(2,"abc"));
        numlet.insert(pair<int,string>(3,"def"));
        numlet.insert(pair<int,string>(4,"ghi"));
        numlet.insert(pair<int,string>(5,"jkl"));
        numlet.insert(pair<int,string>(6,"mno"));
        numlet.insert(pair<int,string>(7,"pqrs"));
        numlet.insert(pair<int,string>(8,"tuv"));
        numlet.insert(pair<int,string>(9,"wxyz")); 
        for(int i=0;i<l;i++)
        {
            str[i]+=numlet[digits[i]];
            int n=str[i].size();
            for(int j=0;j<l;j++)
            {
               ans[i+j*4]+=str[i];    
            }  
        }
        vector<string> ::iterator it;
        for(it=ans.begin();it!=ans.end();it++)
        {
            rec.push_back(*it);
        }
        return rec; 
    }
};

就是简单的填鸭式暴力解法,但是有一个没修正就是有的按键是按照4个字母添加的,应该最后再筛选一下把长度不够的清除就好了,但是运行一下发现一直报错……可能语法本身有问题!等明天回去骚扰鸭子!

让我们看一下鸭子的解法!

(膜拜)


class Solution {
public:
    string str[8]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    vector<string> v;
    vector<string> letterCombinations(string digits) {
        if(digits.size()==0) return v;
        string s="";
        find(0,s,digits);
        return v;
    } 
    void find(int index,string s,string digits){
        if(s.size()==digits.size())
        {
            v.push_back(s);
            return;
        }
        for(int i=0;i<str[digits[index]-'0'-2].size();++i)
        {
            s+=str[digits[index]-'0'-2][i];
            find(index+1,s,digits);
            s.pop_back();
        }
    }
};

用了递归的算法,要用递归就要自建函数,即实现自身调用。在纸上推演了一遍才了解了思路,不得不说……宋神牛逼,将军威武!!!

先总结一下小tips:字符串-‘0’可以转化为数字,这个我总是记不住,然后再-2就可对应str中的字符串了,这样省去了map的使用!非常聪明,同时提醒了我,不要忽略事物本身的顺序性……还要自己再写个map……然后有些东西可以即用即删,擅长用push_back()也要学会如何使用pop_back()!鸭子喜欢的方式就是重复覆盖,这样吧比较省内存?

这题的思路就是先找到第一个元素,然后调用自身函数,一遍遍加下面的元素,省去了判断了是3个字母还是4个字母……聪明!然后找完整的标志是判断长短,符合要求输出并返回!一遍循环结束删除s,开始下一波循环!

再次崇拜我鸭!

剩下时间不多,我就找了找关于相机标定的东西,emmmmm又是数学!!!

https://www.cnblogs.com/mikewolf2002/p/5746667.html

明儿细看!!

这周好好努力,争取周一再找导师商量一下!

886~~

 

发布了42 篇原创文章 · 获赞 16 · 访问量 2902

猜你喜欢

转载自blog.csdn.net/weixin_44412218/article/details/89968667