【leetcode hot 100 17】电话号码的字母组合

server/2025/3/28 5:20:49/

分析:当设计关键字“所有组合”时,要考虑深度优先遍历、广度优先遍历(层次遍历),其中:

  • 深度优先搜索:

    • 自顶向下的递归实现深搜
    • 定义子问题
    • 在当前递归层结合子问题结果解决原问题
  • 广度优先搜索

    • 利用队列
    • 从当前出发,逐步构造解

解法一:回溯法

class Solution {public List<String> letterCombinations(String digits) {List<String> result = new ArrayList<>();if(digits.length()==0){return result;}StringBuffer temp = new StringBuffer();  // 这里使用StringBuffer(可变,或者说变化容易),而不是String(不可变,或者说变化困难)String[] letter = new String[]{"abc","def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};backtrack(result, temp, letter, digits, 0); // 选择第几个数的字母return result;}public void backtrack(List<String> result, StringBuffer temp, String[] letter, String digits, int num){if(num==digits.length()){result.add(new String(temp));return;}// 找第num个数字对应的字母String str = letter[(int)(digits.charAt(num)-'0')-2];for(int i=0; i<str.length(); i++){char ch = str.charAt(i);temp.append(ch);backtrack(result, temp, letter, digits, num+1);temp.deleteCharAt(num);}}
}

注意:

  • temp使用StringBuffer(可变,或者说变化容易),而不是String(不可变,或者说变化困难)
  • char转换为int(int)(digits.charAt(num)-'0')
  • 应对digits=""if(digits.length()==0){return result;}
  • 对于StringBuffer,函数temp.append(ch)为加入元素ch;函数temp.deleteCharAt(num)为删除位置为num的元素;函数temp.delete(n,m)为删除字符串[n,m)的元素。

http://www.ppmy.cn/server/176970.html

相关文章

【网络安全】从浏览器到服务端讲JavaScript安全

未经许可,不得转载。 原作者余弦,本文对原文进行二次创作。 文章目录 基本隐私收集XSS探针JSON 劫持内网浅渗透内网IP获取内网IP端口获取内网主机存活获取路由Web控制台操作内网脆弱Web应用控制突破浏览器边界XSS Virus攻击MongoDB数组绕过注入攻击MongoDB 查询条件绕过(Byp…

在C语言基础上学Java【Java】【一】

众所周知&#xff0c;Java是C风格的语言&#xff0c;对于学过C语言的人学Java可以快速适应。 废话不多说&#xff0c;直接边看代码边学。 数据类型&#xff0c;输入和输出 import java.util.Scanner;//为了使用Scanner public class a1 {//a1是类名&#xff0c;就是文件名&am…

Kubeasz工具快速部署K8Sv1.27版本集群(二进制方式)

文章目录 一、基本信息二、服务器初始化操作三、使用Kubeasz部署K8S集群四、验证集群 一、基本信息 1、部署需要满足前提条件&#xff1a; 注意1&#xff1a;确保各节点时区设置一致、时间同步&#xff1b;注意2&#xff1a;确保在干净的系统上开始安装&#xff1b;注意3&…

Linux 终端操作核心组合键

一、终端操作核心组合键 组合键功能描述使用场景示例Ctrl C强制终止当前正在运行的前台进程停止卡死的命令&#xff08;如 ping&#xff09;Ctrl D1. 发送 EOF&#xff08;文件结束符&#xff09; 2. 退出当前终端会话退出 bash 或 python 交互环境Ctrl Z暂停当前进程并放入…

Gitlab服务器数据迁移及版本升级

公司目前使用的GITLAB服务器&#xff0c;docker方式部署&#xff0c;GITLAB版本为13.11.0&#xff0c;由于版本太老存在安全漏洞&#xff0c;原服务器还部署了其他应用&#xff0c;不方便做升级操作&#xff0c;解决思路是将数据迁移新版本的gitlab服务器。 由于gitlab数据备份…

Word 小黑第40套

对应大猫43 主题 -浏览主题 -选择W样式标准文件就行 1级段落和2级段落&#xff08;用项目符号不影响原本段落文字符号 颜色修改为自动&#xff09; 整段变红的 不是把光标定位到红色字体那里 要选择几个红色字体 再创建样式 插入的空白页一定要是下一页&#xff0c;不能插空白…

Git(12)GitLab持续集成(CICD)

Git(12)之GitLab持续集成(CI/CD) Author: Once Day Date: 2025年3月18日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可查看专栏: Git使用记录_Once_day的博…

对接OpenAI 4O RealTime实现语音实时翻译

目录 资源获取后端实现ffmpeg处理音频文件 前端实现效果 资源获取 OpenAI官网Azure OpenAI 我这里用的是第二种&#xff0c;从Azure上获取的模型资源&#xff0c;想要从这获取得先注册Azure&#xff0c;并添加OpenAI资源&#xff0c;并且部署OpenAI 4O RealTime模型&#xff0…