@LeetCode电话号码的字母组合--Letter Combinations of a Phone Number[C++]

本文详细解析了LeetCode上电话号码的字母组合问题,介绍了如何使用队列实现所有可能的字母组合,通过遍历森林的方式,以输入字符串中每个数字对应的字母为节点构建树形结构,最终实现所有字母组合的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@LeetCode电话号码的字母组合--Letter Combinations of a Phone Number[C++]

问题描述

给定一个包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

数字字母数字字母数字字母
12abc3def
4ghi5jkl6mno
7pqrs8tuv9wxyz

示例:

输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

解决方法及复杂度分析

思路

基本的路线是遍历森林,每棵树是由输入字符串中第一个数字所映射的字母为根结点,依次以剩下数字所映射的字母为子树构成。

这里,我们灵活运用 队列 queue 这一数据结构。先将第一个数组所映射的所有字母压入队列,然后依次取出,按顺序依次与之后数字所映射的所有字母组合,并压入队列中。利用队列先入先出的性质,我们完成了所有字母的组合。

以输入 “23” 为例,算法流程如下图所示。算法示意图

程序实现

	class Solution {
	public:
		vector<string> letterCombinations(string digits) {
			vector<string> words {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
			if (digits.empty()) return vector<stirng> {};
			queue<string> res;
			res.push("");
			for (int i = 0; i < digits.size(); i++) {
				int len = res.size();
				for (int j = 0; j < leng; j++) {
					string tmp = res.front();
					res.pop();
					for (char x : words[digits[i] - '0']) {
						res.push(tmp + x);
					}
				}
			}
			vector<stirng> ans;
			while (!res.empty()) {
				ans.push_back(res.front());
				res.pop();
			}
			return ans;
		}
	};

@北京·怀柔 2019.3.4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值