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

17.电话号码的字母组合

        给定一个仅包含数字 2-9 的字符串 digits,返回所有它能表示的字母组合(数字到字母的映射与电话按键相同)。例如

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

       

通过分析样例可以发现,结果类似于笛卡尔积,即全排列。由于输入数组的长度不固定,因此采用搜索与回溯的方法进行求解。

算法实现步骤如下:

  1. 使用 unordered_map 建立数字与字母的映射关系
  2. 遍历 digits 的每个位置,在映射表中查找对应的字母,通过递归方式构建结果字符串,直到结果字符串的长度与 digits 的长度相等为止

        代码:

class Solution {
public:vector<string> ans;unordered_map<int,string> mp = {{0," "},{1," "},{2,"abc"},{3,"def"},{4,"ghi"},{5,"jkl"},{6,"mno"},{7,"pqrs"},{8,"tuv"},{9,"wxyz"}};void dfs(int i,int n,string& digits,string& temp,unordered_map<int,string> &mp) {if (i == n) {ans.emplace_back(temp);return;}for (char c:mp[digits[i] - '0']) {temp[i] = c;dfs(i + 1,n,digits,temp,mp);}}vector<string> letterCombinations(string digits) {if (digits.size() == 0) return ans;int n = digits.size();string temp(n,0);dfs(0,n,digits,temp,mp);return ans;}
};

       

        时间复杂度:O(n*4^n),n为digits长度,每个数字最多对应4个字母,树高为n,叶子节点树为4^n,每个节点需要O(n)时间构造字符串,共O(n*4^n)

        空间复杂度:O(n),递归最多n次,栈需要O(n),temp长度O(n)

http://www.xdnf.cn/news/452629.html

相关文章:

  • P1220 关路灯
  • 放苹果(动态规划问题/一点♥的思考)
  • 【三维重建】三维场景生成:综述
  • 618开售仅1小时,李佳琦直播间加购同增超10%
  • Python Unicode字符串和普通字符串转换
  • 掌握Docker:从运行到挂载的全面指南
  • 位与运算
  • 一般枚举题目合集
  • Reverse-WP记录11
  • 如何利用PPG实现呼吸频率检测
  • CD38.【C++ Dev】string类的模拟实现(2)
  • 浏览器渲染原理
  • 【苍穹外卖-管理端部分-学习笔记】
  • AI智能体的现状和应用前景
  • 深入解析 PostgreSQL 外部数据封装器(FDW)的 SELECT 查询执行机制
  • typeof运算符和深拷贝
  • primitive创建图像物体
  • 界面控件DevExpress WinForms v24.2 - 数据处理功能增强
  • Oracle where条件执行先后顺序
  • OpenUCX 库介绍与使用指南
  • 深度解析国际数字影像产业园产校融合的协同发展模式​
  • CMake入门与实践:现代C++项目的构建利器
  • CST软件机箱屏蔽效能仿真案例
  • SAR 原始数据预处理的理解
  • 源码交付+可控部署:用户行为分析系统的落地经验
  • 【Pandas】pandas DataFrame describe
  • 16S18S基础知识(1)
  • Leetcode209做题笔记
  • SCAICH(Scientific AI Search Engine)
  • spring boot 注解