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

太原做网站培训百度搜索引擎使用技巧

太原做网站培训,百度搜索引擎使用技巧,做学校法人年度报告的网站,wordpress 文章显示题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 2 -> "abc" 3 -> "def"…

题目描述:

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

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

2 -> "abc"
3 -> "def"
4 -> "ghi"
5 -> "jkl"
6 -> "mno"
7 -> "pqrs"
8 -> "tuv"
9 -> "wxyz"

例如,给定 digits = "23",返回 ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]

注意:2 对应的字母是 "abc"3 对应的字母是 "def",以此类推。每个数字可以对应 3 到 4 个字母。


解题思路:

本题通过回溯算法(Backtracking)来求解。回溯算法是一种通过递归的方法尝试所有可能的解,并在发现无解时回退的算法。回溯的思想很适合这种生成所有可能组合的题目。

步骤概述

  1. 数字映射字母:我们首先创建一个映射关系,数字和字母的对应关系被存储在一个 Map 中。例如,数字 2 映射到字母字符串 "abc",数字 3 映射到字母字符串 "def",等等。

  2. 回溯算法:从字符串的第一个数字开始,递归地遍历每个数字对应的所有字母,将每个字母依次添加到当前组合中。当遍历完所有数字后,将组合添加到结果列表中。

  3. 结束条件:当遍历到数字字符串的末尾时,表示已经生成了一个有效的字母组合,将其加入结果列表。


回溯算法的详细步骤:

  1. 初始化

    • 创建一个 Map 存储数字到字母的映射。

    • 创建一个空的 List<String> 来存储最终的字母组合结果。

  2. 回溯函数

    • 使用递归的方式遍历每个数字对应的所有字母,逐个将字母加入当前组合(使用 StringBuffer 以提高效率)。

    • 当递归到达数字字符串的末尾时,表示已经生成了一个有效的字母组合,将其添加到结果列表中。

    • 在递归返回时,撤销上一步的操作(即删除最后加入的字母),尝试其他字母。

  3. 终止条件

    • 当递归到达数字字符串的末尾时,表示已经生成了一种组合,返回并保存结果。


代码实现:

class Solution {public List<String> letterCombinations(String digits) {List<String> combinations = new ArrayList<>();if(digits.length() == 0){return combinations; // 如果输入为空,直接返回空结果}// 创建数字到字母的映射关系Map<Character,String> map = new HashMap<>();map.put('2',"abc");map.put('3',"def");map.put('4',"ghi");map.put('5',"jkl");map.put('6',"mno");map.put('7',"pqrs");map.put('8',"tuv");map.put('9',"wxyz");// 调用回溯算法backtracking(combinations, digits, 0, map, new StringBuffer());return combinations;}// 回溯算法public void backtracking(List<String> combinations, String digits, int index, Map<Character, String> map, StringBuffer combination) {// 回溯结束条件:当index等于字符串长度时,表示我们已经完成了一个字母组合if(index == digits.length()) {combinations.add(combination.toString()); // 将组合添加到结果集} else {// 获取当前数字对应的字母char digit = digits.charAt(index);String letters = map.get(digit);for(int i = 0; i < letters.length(); i++) {combination.append(letters.charAt(i)); // 将字母加入组合backtracking(combinations, digits, index + 1, map, combination); // 递归调用处理下一个数字combination.deleteCharAt(combination.length() - 1); // 撤销操作,回到上一步}}}
}

代码解析:

  1. 主函数 letterCombinations

    • 检查 digits 是否为空。如果为空,直接返回空列表。

    • 初始化数字到字母的映射 map

    • 调用回溯函数 backtracking,开始递归生成字母组合。

  2. 回溯函数 backtracking

    • index 表示当前处理到数字字符串的哪个位置。

    • index 等于 digits.length() 时,表示已经生成一个完整的字母组合,将其添加到结果集 combinations 中。

    • 否则,遍历当前数字对应的所有字母,将字母依次加入当前的组合(combination),然后递归地处理下一个数字。

    • 回溯时,撤销上一步的字母,恢复组合状态,继续尝试其他字母。

  3. 递归与回溯

    • 递归的核心思想是逐步选择每个数字对应的字母,直到遍历完所有数字。

    • 回溯的关键是撤销上一步的选择(通过 combination.deleteCharAt()),以便尝试其他可能的字母。


时间复杂度分析:

假设输入的数字串长度为 n,每个数字最多对应 4 个字母(如数字 79),最少对应 3 个字母(如数字 26)。

  • 每次递归调用中,我们要遍历当前数字对应的所有字母,因此每次递归的时间复杂度为 O(3)O(4)

  • 总的递归深度是 n(因为我们递归到数字串的末尾),因此总的时间复杂度是 O(4^n),即每个数字有 4 种可能字母,递归深度为 n

空间复杂度:

  • 回溯过程中会维护一个字符串 combination,其大小最大为 n。因此空间复杂度为 O(n)

  • 结果集 combinations 存储了所有字母组合,大小为 4^n,因此空间复杂度为 O(4^n)


总结:

  • 本题通过回溯算法(Backtracking)高效地生成所有可能的字母组合。

  • 回溯算法利用递归的思想,在逐步构建字母组合的过程中,保持对状态的控制,直到所有可能的组合都生成完毕。

  • 该算法的时间复杂度较高,但适用于这类需要生成所有组合或排列的问题。

http://www.dtcms.com/wzjs/283919.html

相关文章:

  • wordpress 帮助手册搜索引擎优化课程总结
  • 网站设计技术seo优化关键词是什么意思
  • 德清网站建设中心网站宣传费用
  • 网络建站招聘临沂森佳木业有限公司
  • 商务网站开发实验综合搜索引擎
  • 景泰建设中国官方网站网页推广怎么做的
  • html做网站项目案例重庆网站推广
  • 网站改版的宣传词百度识图在线识别网页版
  • nodejs网站开发教程新媒体营销推广公司
  • 知晓小程序商店成都公司网站seo
  • 做平台的网站有哪些内容网站关键词排名分析
  • 18互联网站做网站程序免费网站推广网址
  • win7 iis架设网站网站排名推广推荐
  • 关于网站建设的题目百度推广后台登陆首页
  • it前端是做网站的搜索关键词排名优化技术
  • 网站建设 网站开发成都关键词优化报价
  • 怎么样给一个网站做横向导航栏八宿县网站seo优化排名
  • 找南昌兼职做网站的产品推广朋友圈文案
  • 邯郸手机网站开发价格小红书推广引流软件
  • 网站建设培训 苏州以营销推广为主题的方案
  • 企业网站管理系统多站多语言版会计培训班多少钱
  • 创业给别人做网站怎么样淘宝关键词top排行榜
  • 百度网址大全导航首页seo短视频
  • wordpress login跳转seo营销
  • 上海专业网络营销南宁seo
  • 图书馆管理网站建设logo网络推广的网站有哪些
  • 社区网站建设申请报告苏州网站建设开发公司
  • 头条新闻今日头条app下载seo技术培训中心
  • 备案用网站建设方案书aso优化是什么意思
  • 室内装潢装修学校北京自动seo