力扣做题记录——HOT100:17.电话号码的字母组合

给定一个仅包含数字2-9的字符串,返回所有它能表示的字符组合。答案可以按任意顺序返回。
给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。
示例1

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例2

输入:digits = ""
输出:[]

示例3

输入:digits = "2"
输出:["a","b","c"]

提示

  • 0 <= digits.length <= 4
  • digits[i]是范围2-9的一个数字

解答
本题的解题步骤如下:

  1. 将按键数字变成对应的字符串
    可以对按键代表的字母进行预处理,例如使用switch语句,或者直接建立一个字符串数组;
  2. digits[i]变成int类型的变量
    这一步比较简单,使用digits[i] - '0'即可;
  3. 使用嵌套的循环或递归将每一位的字母填进去
    使用深度优先搜索DFS,用一个int变量pos代表当前填入的字母位置,终止条件为pos==digits.size(),此时将字符串tmp填入最终结果数组res中。搜索行为为依次填入各位的字母,每填入一个字母便递归地填写下一位字母,最后将已填入的字母弹出。
    代码
class solution{
public:
	string tmp;
	vector<string> res;
	vector<string> board = {"", "", "abc", "def", "ghi", "jki", "mno", "pqrs", "tuv", "wxyz"};
	void DFS(int pos, string digits) {
		if (pos == digits.size()) {
		res.back_push(tmp);
		return;
		}
		int num = digits[pos] - '0';
		for (int i = 0; i < board[num].size(); i++) {
			tmp.push_back(board[num][i]);
			DFS(pos + 1, digits);
			tmp.pop_back();
		}
	}
	vector<string> letterCombination(string digits) {
		if (digits == "") return res;
		DFS(0, digits);
		return res;
	}
};

本文题目及部分解答来自力扣:电话号码的字母组合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值