当前位置: 首页 > news >正文

昆明网站做的好的公司武汉今日新闻头条

昆明网站做的好的公司,武汉今日新闻头条,直播网站开发要多久,做百度推广网站得多少钱题目 - 点击直达 1. 17. 电话号码的字母组合 中等1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 3. 知识与收获 1. 17. 电话号码的字母组合 中等 1. 题目详情 1. 原题链接 LeetCode 17. 电话号码的字母组合 中等 2. 题目要…

题目 - 点击直达

  • 1. 17. 电话号码的字母组合 中等
    • 1. 题目详情
      • 1. 原题链接
      • 2. 题目要求
      • 3. 基础框架
    • 2. 解题思路
      • 1. 思路分析
      • 2. 时间复杂度
      • 3. 代码实现
    • 3. 知识与收获

1. 17. 电话号码的字母组合 中等

1. 题目详情

1. 原题链接

LeetCode 17. 电话号码的字母组合 中等

2. 题目要求

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述

示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]

示例 2:
输入:digits = “”
输出:[]

示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]

提示:
0 < = d i g i t s . l e n g t h < = 4 0 <= digits.length <= 4 0<=digits.length<=4
d i g i t s [ i ] digits[i] digits[i] 是范围 [ ′ 2 ′ , ′ 9 ′ ] ['2', '9'] [2,9]的一个数字。

3. 基础框架

● Cpp代码框架

class Solution {
public:vector<string> letterCombinations(string digits) {}
};

2. 解题思路

全排列、多叉树的前序遍历
在这里插入图片描述

1. 思路分析

( 1 ) (1) (1) 首先建立数字与对应多个字符的映射;
string aStr[10] = {“”, “”, “abc”, “def”, “ghi”,“jkl”,“mno”,“pqrs”,“tuv”,“wxyz”};
0和1不对应字母,2-9依次对应字符串。
( 2 ) (2) (2) 例如字符串 d i g i t s digits digits=[“237”],其中的2、3、4对应的字符串分别是[“abc”]、[“def”]、[“pqrs”];
组合的结果共有 3 ∗ 3 ∗ 4 = 36 3*3*4=36 334=36种,即先在[“abc”]中任取一个,然后在[“def”]中任取一个,最后在[“pqrs”]中任取一个,即 A 3 1 ∗ A 3 1 ∗ A 4 1 A_3^1 * A_3^1 * A_4^1 A31A31A41
( 3 ) (3) (3) 把[“abc”]、[“def”]、[“pqrs”]分别看做多叉树的第一层、第二层、第三层;
对这颗多叉树进行深度优先遍历就可以依次得到组合的结果:
第一层[“abc”]首先选择第一个字符’a’,第二层[“def”]选择第一个字符’d’,第三层[“pqrs”]选择第一个字符’p’,这样到达最后一层时相当于完成了一次深度优先遍历,也得到了一种组合[“adp”];第三层共包含四个字符,故需要选择四次,共得到四种组合[“adp”、“adq”、“adr”、“ads”];
之后回到第二层[“def”],选择第二个字符’e’,第三层依次选择[“pqrs”]中的字符,得到四种组合[“aep”、“aeq”、“aer”、“aes”];
之后再回到第二层[“def”],选择第三个字符’f’,第三层依次选择[“pqrs”]中的字符,得到四种组合[“afp”、“afq”、“afr”、“afs”];
这样第一层字符为’a’的所有组合都选择了一遍,对第一层中’a’字符之后的剩余字符继续进行上述遍历操作,得到以该字母开头的所有组合;
( 4 ) (4) (4) 多叉树的遍历本质与二叉树相同,二叉树节点只有两个,递归时只需递归左右子树即可;多叉树节点则有多个,递归时需要依次递归所有子树;
( 5 ) (5) (5) 递归函数的设计:
引用类型的结果二维数组vector<string>& ret
引用类型的字符串类型string& digits:所有栈帧都用到初始字符串参数;
int类型的index:当前栈帧内所在的digits的下标,也代表这在第几层,超过范围时类似于二叉树中节点为nullptr
string类型的一种结果字符串string comStr:每一层都会从当前层选择一个字符与comStr进行组合,当最后一层的字符与其组合后,便是一种结果,该结果继续传递给最后一层的下一层,在最后一层的下一层并不存在,此时i是越界的,函数将返回,再返回之前需要把最后一层得到并传入的结果尾插到结果二维数组中;

2. 时间复杂度

O ( 4 N ) O(4^N) O(4N)

范围[2, 9]数字对应的字符最少有 3 3 3个,最多有 4 4 4个,假设输入的数字长度为 N N N,且输入的数字对应的字符都是 4 4 4个。 N N N个数字对应 N N N个长度为 4 4 4的字符串,对一个长度为 4 4 4的字符串进行 4 4 4次选择,则对 N N N个长度为 4 4 4的字符串进行 4 N 4^N 4N次选择。

3. 代码实现

class Solution {const static string aStr[10];
public:// 多叉树、回溯、全排列void combin(vector<string>& ret, const string& digits, int i, string comStr){// 递归结束条件if(i >= digits.size()){ret.push_back(comStr);return;}// 深度递归int index = digits[i] - '0';for(int j = 0; j < aStr[index].size(); ++j){combin(ret, digits, i + 1, comStr + aStr[index][j]);}}vector<string> letterCombinations(string digits) {vector<string> ret;if(digits.empty()) return ret;combin(ret, digits, 0, "");return ret;}
};
const string Solution::aStr[10] = {"", "", "abc", "def", "ghi","jkl","mno","pqrs","tuv","wxyz"};

3. 知识与收获

( 1 ) (1) (1) 二叉树深度优先遍历、回溯


T h e The The E n d End End

http://www.wangmingla.cn/news/152549.html

相关文章:

  • 营销网站建设公司哪家好百度seo排名优化公司哪家好
  • 青岛建设银行社会招聘网站网络舆情优化公司
  • wap网站微信一键登录爱站工具包
  • 怎么样利用一些网站开发客户app开发费用一览表
  • WordPress使用自己主题白云百度seo公司
  • 网站搭建中转电子商务网站建设流程
  • 茂名网站建设解决方案广告推广渠道
  • 东莞做网站哪里好怎样创建网站
  • 孝感的网站建设廊坊seo外包
  • 百度公司可以做网站么百度账号安全中心官网
  • 一级a做爰片免费网站丶百度官方官网
  • 渭南网站建设与维护如何免费做网站
  • 沭阳奥体小区做网站的艺考培训学校
  • 聊城手机网站建设公司黑马培训是正规学校吗
  • 网上购物网站建设如何推广普通话
  • 中国建设监理协会网站seo网络营销推广公司深圳
  • 设计免费关键词排名优化公司哪家好
  • 具有品牌的广州做网站千锋教育和黑马哪个好
  • 宝安网站建设制作百度网址收录入口
  • 合肥专业网站建设百度推广方法
  • wordpress月份归档要收录吗网站优化效果
  • 洛阳网站制作免费制作永久个人网站
  • 景区网站设计百度一下百度下载
  • 江苏省疫情防控最新文件广州seo网络优化公司
  • 青海建设网站多少钱网站推广优化外包公司
  • 怎么做资源网站网页设计与制作项目教程
  • 吉林省建设厅网站评职称系统手机百度下载免费安装
  • java网站项目可做外链吧官网
  • 上海网站建设微信开发广告设计网站
  • 潍坊网站制作价格网站源码