今日小结——20190418(LeetCode日常+啥也没干)

一、#16:最接近的三数之和

这个题目虽然是中等题,但是没啥难度,用最基础的for三连遍历全部,找出绝对值最小的和与目标的差就可以了

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int i,j,k;
        int res=0;
        int min=abs(nums[0]+nums[1]+nums[2]-target);
        if(nums.size()==3)
        {
            return nums[0]+nums[1]+nums[2];
        }
        for(i=0;i<nums.size();i++)
            for(j=i+1;j<nums.size();j++)
                for(k=j+1;k<nums.size();k++)
                {
                    int temp=nums[i]+nums[j]+nums[k];
                    
                    if(min>(abs(temp-target))||min==(abs(temp-target)))
                    {
                        min=abs(temp-target);
                        res=temp;
                    }
                }
        return res;
    }
};

二、#17:电话号码的字母组合

题目要求,输入2-9数字的字符串,输出对应到电话号码的字母组合

拿到题目,就让我想到了树,顶是输入字符串的第一个数字,然后逐个往下组合,直到遍历,既然用到了树,那么就会想到用递归,一层层嵌套是这个题目非常简单且容易想到的方法

首先我们要建立一个二维向量vector<string> v;这个方法在之前有提到过,行符合vector的性质,列符合string的性质,我们现在可以根据输入的大小来无限扩充行,所以行咱们不用考虑,关键的是列,也就是每个string怎么取得,自顶向下的树的遍历就变得很重要咯

这里用到的几个操作进行分享一下,digits[index]-'0'可以吧数字字符串转化为数字,具体可以参照十六进制得到结果,这是一个小技巧,还有就是在函数内部提前写return 就可以在我们想要函数退出的地方进行退出

递归很大的一个特点是,一定要写好for语句哈哈哈哈,因为会一直在里面循环

 

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

 我设置这部分为插入递归的部分,当数字为2的时候,就会利用str[0]进行限制遍历长度,每一列则是需要添加到结果中的字母,首先添加一个,然后通过递归再找下一列的数字,直到满足

        if(s.size()==digits.size())
        {
            v.push_back(s);
            return;
        }

 则寻找完毕需要答案中的一列,return跳出当前递归层,并pop_back这一列的最后一个数字,再进行遍历,直到所有情况都被找到,递归是很节约空间的一种方式,但是运行时间有点凉,不过做出来为第一要务嘻嘻嘻

 下面贴全部代码:

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

 三、与我宝研究正则辣个题目,失败嘻嘻嘻

这个题目到底是困难级别的,就是骚气,惹不起惹不起,我们以后只做简单和中等!!!

四、论文

把昨天尾巴看完并又找了几篇,明儿继续,感觉有一篇很重要!

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值