第十七题:电话号码的字母组合

embedded/2024/10/22 15:32:05/

题目描述

给定一个仅包含数字 2-9 的字符串,返回所有可能的由它组成的字母组合。你可以假设输入字符串至少包含一个数字,并且不超过3位数字。

实现思路

使用哈希表或数组存储每个数字对应的字符,然后通过递归或迭代的方式生成所有可能的组合。如果字符串长度为n,则可以看作是n层循环,每层循环可以选择对应数字的所有字符之一。

算法实现

C语言实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void backtrack(char *digits, int pos, char *combination, int *resultLength, char **result) {static const char *table[] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};if (pos == strlen(digits)) {result[*resultLength] = malloc(strlen(combination) + 1);strcpy(result[*resultLength], combination);(*resultLength)++;} else {for (int i = 0; table[digits[pos] - '0'][i]; ++i) {combination[pos] = table[digits[pos] - '0'][i];backtrack(digits, pos + 1, combination, resultLength, result);}}
}int* letterCombinations(char *digits, int *returnSize) {if (!strlen(digits)) return NULL;int resultLength = 0;char *combination[100] = {0};*returnSize = 0;backtrack(digits, 0, (char[5]){0}, &resultLength, combination);int *result = malloc(resultLength * sizeof(int));for (int i = 0; i < resultLength; ++i) {result[i] = (int)combination[i];}return result;
}

Python实现

python">class Solution:def letterCombinations(self, digits: str) -> List[str]:if not digits:return []phoneMap = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz'}def backtrack(combination, next_digits):if not next_digits:combinations.append(combination)else:for letter in phoneMap[next_digits[0]]:backtrack(combination + letter, next_digits[1:])combinations = []backtrack("", digits)return combinations

Java实现

java">import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Solution {public List<String> letterCombinations(String digits) {List<String> combinations = new ArrayList<>();if (digits.length() == 0) {return combinations;}Map<Character, String> phoneMap = new HashMap<>();phoneMap.put('2', "abc"); phoneMap.put('3', "def"); phoneMap.put('4', "ghi");phoneMap.put('5', "jkl"); phoneMap.put('6', "mno"); phoneMap.put('7', "pqrs");phoneMap.put('8', "tuv"); phoneMap.put('9', "wxyz");backtrack(combinations, phoneMap, digits, 0, new StringBuilder());return combinations;}private void backtrack(List<String> combinations, Map<Character, String> phoneMap, String digits, int index, StringBuilder combination) {if (index == digits.length()) {combinations.add(combination.toString());} else {String letters = phoneMap.get(digits.charAt(index));for (int i = 0; i < letters.length(); i++) {combination.append(letters.charAt(i));backtrack(combinations, phoneMap, digits, index + 1, combination);combination.deleteCharAt(index);}}}
}

时间复杂度

O(4^n * n),其中n是输入字符串的长度。因为最多会有4个选项('7’和’9’有4个选项,其他数字有3个选项),并且对于每一个组合,我们都需要额外的时间来构造这个字符串。


http://www.ppmy.cn/embedded/108744.html

相关文章

快速失败 (fail-fast) 和安全失败 (fail-safe)

1. 定义与工作原理 1.1 快速失败&#xff08;Fail-Fast&#xff09; 定义&#xff1a; 快速失败是一种系统设计原则&#xff0c;当系统遇到异常情况或错误时&#xff0c;立即停止执行并返回错误&#xff0c;而不是试图继续执行或处理潜在的问题。快速失败系统会主动检测系统中…

基于Tomcat的JavaWeb(ASP)项目构建(图解)

目录 配置IDEA的TOMCAT环境 环境设置 导入API(可选) 创建项目 构建项目 ​编辑 运行项目 项目结果 ​编辑 查看配置基础项目 配置IDEA的TOMCAT环境 环境设置 导入API(可选) 创建项目 构建项目 运行项目 项目结果 查看配置基础项目 了解Web Application: Exploded与…

【免费分享】高斯过程回归(Gaussian process regression)原理详解及MATLAB代码实战

MATLAB实战 net fitrgp(p_train, t_train, KernelFunction, ardsquaredexponential, ...Optimizer, lbfgs, KernelParameters, [sigmaL0; sigmaF0], Sigma, sigmaN0);fitrgp 函数来训练一个 高斯过程回归模型 (Gaussian Process Regression, GPR)。具体来说&#xff0c;它在训…

javaWeb【day04】--(MavenSpringBootWeb入门)

01. Maven课程介绍 1.1 课程安排 学习完前端Web开发技术后&#xff0c;我们即将开始学习后端Web开发技术。做为一名Java开发工程师&#xff0c;后端Web开发技术是我们学习的重点。 1.2 初识Maven 1.2.1 什么是Maven Maven是Apache旗下的一个开源项目&#xff0c;是一款用于…

AF透明模式/虚拟网线模式组网部署

透明模式组网 实验拓扑 防火墙基本配置 接口配置 eth1 eth3 放通策略 1. 内网用户上班时间&#xff08;9:00-17:00&#xff09;不允许看视频、玩游戏及网上购物&#xff0c;其余时 间访问互联网不受限制&#xff1b;&#xff08;20 分&#xff09; 应用控制策略 2. 互联…

【Webpack】基本使用方法

&#x1f4e2;博客主页&#xff1a;逆旅行天涯-CSDN博客 &#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01; 参考视频&#xff1a; 30 分钟掌握 Webpack_哔哩哔哩_bilibili 什么是webpack 简单来说就是一个 打包工具&#xff0c; 可…

HTTP 一、基础知识

一、概述 1、概述 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff1a; 全称超文本传输协议&#xff0c;是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。HTTP 是一种应用层协议&#xff0c;是基于 …

ubuntu16.04 vim使用中文出现乱编文档处理

问题现象 vim 编译文件时出现乱码问题 解决方法 1. 中文语言包安装: apt-get install language-pack-zh-hans 2. 配置环境变量:echo "export LC_ALLzh_CN.UTF-8" >>/etc/bash.bashrc 3. 修改当前环境的字符集 /etc/default/locale cat /etc/default/locale…