Leetcode17. Letter Combinations of a Phone Number

本文详细解析了LeetCode上的经典题目Letter Combinations of a Phone Number,并提供了迭代方法的C++代码实现,通过层次遍历的方式解决电话号码对应的字母组合问题。

Leetcode17. Letter Combinations of a Phone Number

写在前头:本人C++功底比较差,拿leetcode练C++,大佬莫笑。

输入2-9,返回所有可能的字符串
在这里插入图片描述
在这里插入图片描述

递归和迭代

这个题里面,迭代就像树的层次遍历,一行一行的出,出一个,把它子节点全push进来,直到最后一行为止全是子节点,ok了
先找[“a”“b”“c”]
递归的思想类似深度遍历,一直往下找到子节点才开始出。递归方法还没写,后面补充。
先找[“ad”]

迭代

代码.

// Iterative
class Solution {
public:
    vector<string> letterCombinations(string digits) {
        vector<string> res;
        if (digits.size()==0) 
            return res;
        string dict[]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        res.push_back("");
        int x=digits.size(),y;
        for(int i=0;i<x;i++)
        {
            int n=res.size();       //这里要注意!!!!!!
            string m=dict[digits[i]-'2'];
            for(int j=0;j<n;j++)
            {   
                string a=res.front();
                res.erase(res.begin());    
                for(int k=0;k<m.size();k++)
                {
                    res.push_back(a+m[k]);
                }      
            }
        }
        return res;
    }   
};
string dict[]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};

大概作用类似哈希表,字典?但是要注意  数字string 2 对应 dict[0],这个数别搞错。
 int n=res.size();
 ...
 for(int j=0;j<n;j++)
 
 这个东西很关键,不然时间就超了,要如果直接循环条件写成res.size(),
 就要算很多次(因为循环次数挺多的到后面)。
res.erase()删除,这个位置可以是下标,也能是指针。
res.erase(10);从pos=10开始后面全删完。
res.erase(6,4);从pos=6开始后面删4个。
res.erase(res.begin()+10) 删除第11个元素。
res.erase(res.begin()+10,res.end()) 从第11个元素开始删到结束,删除集合--左闭右开[ , )。
另一种删除是res.pop_back(),跟push_back()很像都是back,对尾部操作,删最后一个,这个有点蠢。

res.begin()返回首个元素的指针;
res.end()返回的是最后一个元素+1的指针,正好和上面左闭右开一样蠢的刚刚好。
res.front()返回的是首个元素,和res[0]是一个效果有没有?能再蠢一点吗?

迭代

还没写呢,准备去洗澡,回来写完也不一定贴,嗯,就这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值