news 2026/7/31 5:16:07

LeetCode 3014.输入单词需要的最少按键次数 I:遍历 / if-else计算(比纯数学公式写起来麻烦但好想)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 3014.输入单词需要的最少按键次数 I:遍历 / if-else计算(比纯数学公式写起来麻烦但好想)

【LetMeFly】3014.输入单词需要的最少按键次数 I:遍历 / if-else计算(比纯数学公式写起来麻烦但好想)

力扣题目链接:https://leetcode.cn/problems/minimum-number-of-pushes-to-type-word-i/

给你一个字符串word,由不同小写英文字母组成。

电话键盘上的按键与不同小写英文字母集合相映射,可以通过按压按键来组成单词。例如,按键2对应["a","b","c"],我们需要按一次键来输入"a",按两次键来输入"b",按三次键来输入"c"

现在允许你将编号为29的按键重新映射到不同字母集合。每个按键可以映射到任意数量的字母,但每个字母必须恰好映射到一个按键上。你需要找到输入字符串word所需的最少按键次数。

返回重新映射按键后输入word所需的最少按键次数。

下面给出了一种电话键盘上字母到按键的映射作为示例。注意1*#0对应任何字母。

示例 1:

输入:word = "abcde"输出:5解释:图片中给出的重新映射方案的输入成本最小。 "a" -> 在按键 2 上按一次 "b" -> 在按键 3 上按一次 "c" -> 在按键 4 上按一次 "d" -> 在按键 5 上按一次 "e" -> 在按键 6 上按一次 总成本为 1 + 1 + 1 + 1 + 1 = 5 。 可以证明不存在其他成本更低的映射方案。

示例 2:

输入:word = "xycdefghij"输出:12解释:图片中给出的重新映射方案的输入成本最小。 "x" -> 在按键 2 上按一次 "y" -> 在按键 2 上按两次 "c" -> 在按键 3 上按一次 "d" -> 在按键 3 上按两次 "e" -> 在按键 4 上按一次 "f" -> 在按键 5 上按一次 "g" -> 在按键 6 上按一次 "h" -> 在按键 7 上按一次 "i" -> 在按键 8 上按一次 "j" -> 在按键 9 上按一次 总成本为 1 + 2 + 1 + 2 + 1 + 1 + 1 + 1 + 1 + 1 = 12 。 可以证明不存在其他成本更低的映射方案。

提示:

  • 1 <= word.length <= 26
  • word仅由小写英文字母组成。
  • word中的所有字母互不相同。

解题思路

一共有8个可用按键,分配按键时应该优先使用按1次的位置,分配完再分配按2次的位置,…。

解题方法一:遍历

0 00l e n ( w o r d ) − 1 len(word)-1len(word)1遍历,第i ii个字母的按键次数为⌊ i 8 ⌋ + 1 \lfloor\frac{i}{8}\rfloor+18i+1

  • 时间复杂度O ( l e n ( w o r d ) ) O(len(word))O(len(word))
  • 空间复杂度O ( 1 ) O(1)O(1)

AC代码

C++
/* * @LastEditTime: 2026-07-30 19:00:50 */classSolution{public:intminimumPushes(string&word){intans=0;for(inti=0,n=word.size();i<n;i++){ans+=i/8+1;}returnans;}};

解题方法二:if-else计算

如果字母个数为1-8, 则每个字母只需要按一次;

否则(先分配8个字母共计需要按8次)如果字母个数为9-16, 则第9-16个字母需要按两次;

否则(再分配8个需要按两次的字母)如果字母个数为17-24, 则第17-24个字母需要按三次;

否则(再分配8个需要按三次的字母),第25-n个字母需要按四次。

  • 时间复杂度O ( 1 ) O(1)O(1),其实是log ⁡ 8 l e n ( w o r d ) \log_8 len(word)log8len(word)
  • 空间复杂度O ( 1 ) O(1)O(1)
C++
/* * @LastEditTime: 2026-07-30 18:59:13 */classSolution{public:intminimumPushes(string&word){// 1-8: n// 9-16: 2n// 17-24: 3n// 25-26: 4nintn=word.size();intcnt=0;if(n<=8){returnn;}cnt+=8;if(n<=16){returncnt+(n-8)*2;}cnt+=8*2;if(n<=24){returncnt+(n-16)*3;}cnt+=8*3;returncnt+(n-24)*4;}};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 5:16:05

2026年TOP5全自动焊接成型一体机专业公司排名揭晓

2026年全自动焊接成型一体机行业TOP5专业公司排名随着自动化技术在制造业中的深入应用&#xff0c;全自动焊接成型一体机已成为提高生产效率、降低生产成本的关键设备之一。以下是根据技术实力、市场表现及用户反馈综合评定的2026年全自动焊接成型一体机领域内TOP5专业公司&…

作者头像 李华
网站建设 2026/7/31 5:16:02

Android自动化熄屏:基于Auto.js的device.setScreenTimeout实现

1. 项目概述&#xff1a;为什么我们需要自动化熄屏&#xff1f;在移动设备的使用中&#xff0c;熄屏操作看似简单&#xff0c;却常常是重复性最高、最容易被忽视的环节。想象一下&#xff0c;你正在用手机进行一项需要长时间等待的任务&#xff0c;比如下载一个大文件、运行一个…

作者头像 李华
网站建设 2026/7/31 5:14:44

Lua实现可扩展行为树:游戏AI模块化与热更新实战

1. 项目概述&#xff1a;为什么游戏AI需要可扩展的行为树&#xff1f;在游戏开发&#xff0c;尤其是独立游戏或中小型团队项目中&#xff0c;我们常常面临一个矛盾&#xff1a;既希望AI逻辑足够复杂、智能&#xff0c;能够应对多样的游戏场景&#xff0c;又受限于紧张的开发周期…

作者头像 李华
网站建设 2026/7/31 5:13:32

小升初数学思维提升训练:94集视频课程与PDF教材全解析

今天来看一套完整的小升初数学思维提升训练资源&#xff0c;包含94集视频课程和配套PDF教材。这套资源专门针对小学高年级到初中过渡阶段的学生设计&#xff0c;重点培养数学思维能力和解题技巧。这套训练材料的特点是系统性强、覆盖面广&#xff0c;从基础概念到奥数思维层层递…

作者头像 李华
网站建设 2026/7/31 5:09:45

【JSP】Java Web 爱鲜花——鲜花店管理系统(源码+文档)【独一无二】

爱鲜花——鲜花店管理系统 项目描述 爱鲜花鲜花店管理系统是一套基于 Java Web 技术开发的在线鲜花销售平台&#xff0c;采用 JSP、Servlet、JDBC、MySQL 等技术实现&#xff0c;面向鲜花零售业务提供商品展示、用户服务、购物结算和订单管理等能力。系统以简洁清新的花店风格为…

作者头像 李华
网站建设 2026/7/31 5:09:34

C/C++实现二进制转十六进制:算法详解与工程实践

1. 项目概述&#xff1a;从二进制到十六进制的桥梁搭建在底层开发、嵌入式系统、网络协议分析乃至安全逆向的日常工作中&#xff0c;我们几乎每天都在和二进制数据打交道。无论是从内存中dump出来的一段数据&#xff0c;还是从网络接口捕获的一个数据包&#xff0c;它们最原始的…

作者头像 李华