力扣题目学习笔记(OC + Swift)17. 电话号码的字母组合

17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述

关键字:所有组合
模式识别:搜索算法

解题思路:
自顶向下的递归实现深度搜索
定义子问题
在当前递归层结合子问题解决原问题

Swift

func letterCombinations(_ digits: String) -> [String] {guard !digits.isEmpty else { return [] }let phoneMap:[Character : String] = ["2": "abc", "3": "def", "4": "ghi", "5": "jkl","6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"]var combinations:[String] = [String]();var combination:String = ""//回朔法,func backTrack(_ index:Int) {if index == digits.count {combinations.append(combination)}else {let digit = digits[digits.index(digits.startIndex, offsetBy: index)]if let letters = phoneMap[digit] {for letter in letters {combination.append(letter)backTrack(index+1)combination.removeLast()}}}}backTrack(0)return combinations}

OC

//深度优先遍历
- (NSArray *)letterCombinations:(NSString *)digits {if (digits.length == 0) {return @[];}NSDictionary *phoneMap = @{@"2": @"abc", @"3": @"def", @"4": @"ghi", @"5": @"jkl",@"6": @"mno", @"7": @"pqrs", @"8": @"tuv", @"9": @"wxyz"};NSMutableArray *combinations = [NSMutableArray array];NSMutableString *combination = @"".mutableCopy;//回溯法[self backTrackWithCombinations:combinationscombination:combinationphoneMap:phoneMapdigits:digitsindex:0];return combinations.copy;
}- (void)backTrackWithCombinations:(NSMutableArray *)combinationscombination:(NSMutableString *)combinationphoneMap:(NSDictionary *)phoneMapdigits:(NSString *)digitsindex:(NSInteger)index {if (index == digits.length) {[combinations addObject:combination.copy];}else {NSString *digit = [digits substringWithRange:NSMakeRange(index, 1)];NSString *letters = phoneMap[digit];if (letters.length > 0) {for (NSInteger i=0; i<letters.length; i++) {unichar charac = [letters characterAtIndex:i];NSString *str = [NSString stringWithCharacters:&charac length:1];[combination appendString:str];[self backTrackWithCombinations:combinationscombination:combinationphoneMap:phoneMapdigits:digitsindex:index+1];[combination deleteCharactersInRange:NSMakeRange((combination).length-1, 1)];}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/222060.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Amazon Toolkit — CodeWhisperer 使用

tFragment--> 官网&#xff1a;https://aws.amazon.com/cn/codewhisperer/?trkcndc-detail 最近学习了亚马逊云科技的 代码工具&#xff0c;感慨颇多。下面是安装 和使用的分享。 CodeWhisperer&#xff0c;亚马逊推出的实时 AI 编程助手&#xff0c;是一项基于机器学习…

6. 行为模式 - 观察者模式

亦称&#xff1a; 事件订阅者、监听者、Event-Subscriber、Listener、Observer 意图 观察者模式是一种行为设计模式&#xff0c; 允许你定义一种订阅机制&#xff0c; 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 问题 假如你有两种类型的对象&#xff1a; ​ 顾…

使用Python将OSS文件免费下载到本地:第四步 将ECS中文件下载到本地

大家好&#xff0c;我是水滴~~ 本文将介绍了使用的知识点、以及将ECS中文件下载到本地的代码、并对该代码进行详细解析、最后给出部署方案&#xff0c;希望能对你有所帮助&#xff01; 《Python入门核心技术》专栏总目录・点这里 系列文章 使用Python将OSS文件免费下载到本地…

使用Open3D实现3D激光雷达可视化:以自动驾驶的2DKITTI深度框架为例(上篇)

原创 | 文 BFT机器人 3DLiDAR传感器&#xff08;或&#xff09;三维光探测和测距是一种先进的发光仪器&#xff0c;能够像我们人类一样在三维空间中感知现实世界。这项技术特别彻底改变了地球观测、环境监测、侦察和现在的自动驾驶领域&#xff0c;它提供准确和详细数据的能力…

Asp.Net Core 项目中常见中间件调用顺序

常用的 AspNetCore 项目中间件有这些&#xff0c;调用顺序如下图所示&#xff1a; 最后的 Endpoint 就是最终生成响应的中间件。 Configure调用如下&#xff1a; public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseD…

个人财务工具、密钥管理平台、在线会计软件、稍后阅读方案 | 开源专题 No.51

gethomepage/homepage Stars: 10.1k License: GPL-3.0 这个项目是一个现代化、完全静态的、快速且安全的应用程序仪表盘&#xff0c;具有超过 100 种服务和多语言翻译的集成。 快速&#xff1a;网站在构建时以静态方式生成&#xff0c;加载时间飞快。安全&#xff1a;所有对后…

基于阿里云平台帮助出海企业应对DDoS攻击

在出海浪潮下&#xff0c;越来越多企业选择出海。但海外市场也并非一片红利。由于海外千差万别的法律政策、摸不清的网络脉络。在业务快速扩展的同时&#xff0c;也势必会迎来“网络恶势力”DDoS攻击。海外更是DDoS攻击的重灾区&#xff0c;根据外部报道&#xff0c;白俄国安委…

VScode版本太低导致安装插件时报错:Unable to install ‘ms-vscoderemote-server‘ extension

VS code安装插件时报错&#xff1a;Unable to install ‘ms-vscoderemote-server’ extension because it is not compatible with the current version of VS Code (version 1.421) 是因为VS code 版本太低的原因&#xff0c;可以更新Vscode即可&#xff1a;点击help&#x…

C语言——内存函数的使用与模拟实现

大家好&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing 原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各位…

RPC(5):AJAX跨域请求处理

接上一篇RPC&#xff08;4&#xff09;&#xff1a;HttpClient实现RPC之POST请求进行修改。 1 修改客户端项目 1.1 修改maven文件 修改后配置文件如下&#xff1a; <dependencyManagement><dependencies><dependency><groupId>org.springframework.b…

数据分析师的职业规划与参考资料

数据分析师如何规划 参考&#xff1a;超详细的数据分析职业规划 一个产品的出现可以从业务和技术两个方向分析&#xff0c;业务需求技术支持产品的出现。 如果把职业也当成一个产品&#xff0c;也有类似的分析&#xff0c; 其中业务也就是领域&#xff0c;即这个业务领域的特点…

mac电脑m1 arm架构安装虚拟机教程

1、准备一台虚拟机&#xff0c;安装CentOS7 常用的虚拟化软件有两种&#xff1a; VirtualBoxVMware 这里我们使用VirtualBox来安装虚拟机&#xff0c;下载地址&#xff1a;Downloads – Oracle VM VirtualBox 001 点击安装 002 报错&#xff1a;he installer has detected an…

【Python】基于ORM的SqlAlchemy操纵数据库代码实现

说明 ORM&#xff0c;全称Object-Relational Mapping&#xff0c;即对象-关系映射&#xff0c;是一种程序设计技术&#xff0c;用于在面向对象编程语言和关系数据库之间建立对应关系。它的主要目的是让开发者能够使用面向对象的方式操作数据库&#xff0c;而不必过多地关注数据…

【 USRP安装教程】MATLAB 2023B

步骤 matlabdocusrp驱动包 doc 安装包内容列表 双击“R2023b_Doc_Windows.iso” 打开cmd 查看盘符 切换盘符 因为是F盘&#xff0c;所以cmd输入&#xff1a;“F:” F:进入可安装界面 cd F:\bin\win64安装离线文档库 .\mpm install-doc --matlabroot"C:\MATLAB\R202…

idea 如何使用 JaCoCo 跑覆盖率

背景介绍 什么代码覆盖&#xff1f; 代码覆盖(Code coverage)是软件测试中的一种度量&#xff0c;描述程序中源代码被测试的比例和程度&#xff0c;所得比例称为代码覆盖率。简单来理解&#xff0c;就是单元测试中代码执行量与代码总量之间的比率。 Java常用的单元测试覆盖率…

kafka offset sasl加密连接

kafka-tool&#xff08;offset&#xff09; 进行SCRAM连接&#xff0c;直接上图 填写jaas的认证&#xff08;账密 引用包&#xff09;

Python tkinter控件全集之组合选择框 ttk.ComboBox

Tkinter标准库 Tkinter是Python的标准GUI库&#xff0c;也是最常用的Python GUI库之一&#xff0c;提供了丰富的组件和功能&#xff0c;包括窗口、按钮、标签、文本框、列表框、滚动条、画布、菜单等&#xff0c;方便开发者进行图形界面的开发。Tkinter库基于Tk for Unix/Wind…

使用Gitee中的CI/CD来完成代码的自动部署与发布(使用内网穿透把本地电脑当作服务器使用)

&#x1f4da;目录 &#x1f4da;简介:⚙️ 所需工具&#xff1a;&#x1f4a8;内网穿透配置&#x1f4ad;工具介绍✨命令安装&#x1f38a;配置Cpolar&#x1f573;️关闭防火墙&#x1f95b;防火墙端口放行规则&#xff08;关闭防火墙可以忽略&#xff09;&#x1f36c;小章总…

Windows系统下的可用RADIUS软件-[资源]

RADIUS协议相关原理介绍&#xff0c;可参考博客RADIUS协议原理介绍报文分析配置指导-RFC2865/RFC2866。 本文用于提供和介绍Window系统下几种可用的RADIUS软件。主要涉及软件有radius_ping&#xff08;绿色免安装版&#xff09;和WinRadius&#xff08;绿色免安装版&#xff09…

使用极狐gitlab初始化导入本地项目

本地有项目的情况需要同步到极狐gitlab上 第一步&#xff1a; 在gitlab上新创建一个空项目 ⚠️⚠️⚠️这里需要注意红色圈住的地方一定不要选择&#xff0c;因为选择了这个后续会有不必要的麻烦 第二步 在本地项目中删除原来的.git文件(这一步如果是新项目可以忽略&#…