力扣刷题:17. 电话号码的字母组合

题目要求

在这里插入图片描述

整体思路

首先建一个长度为10的vecotor,存放与数字相对应的字母

接着根据digits的长度,利用深度优先递归的组成字符串:
当nowIndex小于maxIndex(字符串长度)时,将digits[index]数字对应的所有字母分别加入字符串尾部。
当nowIndex大于maxIndex(字符串长度)时,将组成的字符串放进字符串数组中。

最后返回字符数组

代码

class Solution {
public:
vector<vector<char>> vChar;

vector<string> letterCombinations(string digits) 
{
    //特殊值判断
    if (digits.empty())
    {
	    return {};
    }
    vectorInit();
    vector<string> vStr;
    combineStr(0, digits.size() - 1, "", digits, vStr);
    return vStr;
}

//初始化字符数组
void vectorInit()
{
  vChar.push_back({});
  vChar.push_back({});
  vChar.push_back({'a','b','c'});
  vChar.push_back({'d','e','f'});
  vChar.push_back({ 'g','h','i' });
  vChar.push_back({ 'j','k','l' });
  vChar.push_back({ 'm','n','o' });
  vChar.push_back({ 'p','q','r', 's' });
  vChar.push_back({ 't','u','v' });
  vChar.push_back({ 'w','x','y', 'z' });
}

//递归地组成字符串
void combineStr(int nowIndex, const int maxIndex, string str, const string &digits, vector<string>& v)
{
  if (nowIndex > maxIndex)
  {
	v.push_back(str);
  }
  else
  {
	for (auto i : vChar[digits[nowIndex] - '0'])
	{
	  str.push_back(i);
	  combineStr(nowIndex + 1, maxIndex, str, digits, v);
	  str.pop_back();
	}
  }
}

};

学到了什么

1、注意特殊值判断,当字符串为空的时候。(因为这个提交错误一次)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值