LC3014 输入单词需要的最少按键次数Ⅰ与方法内容的易读性

题目

刷题做到力扣 3014,题目要求设计电话键盘上的按键映射,返回按出 word 单词的最小按键次数,1 ≤ word.length ≤ 26,且仅由小写英文字母组成,所有字母互不相同

我的题解

简单题,略加思索拿下:

public int minimumPushes(String word) {// 1 <= word.length <= 26if (word.length() <= 8) return word.length();else if (word.length() <= 16) return 8 + 2 * (word.length() - 8);else if (word.length() <= 24) return 8 + 16 + 3 * (word.length() - 16);else return 8 + 16 + 24 + 4 * (word.length() - 24);
}

这是一个基于条件逻辑的解决方案,很朴素

其他题解中关于易读性的思考

提交,看看别人的题解:

public int minimumPushes(String word) {int n = word.length();int k = n / 8;return (k * 4 + n % 8) * (k + 1);
}

?这个题解显然是更简洁的,但我数学不好,确实没办法一次性读懂(在已经理解题目的前提下)

于是阅读题解的说明,原来是利用了求和公式:

8 ⋅ (1 + 2 + ⋯ + k) = 4k (k + 1)

由上,在加上剩余的 n mod 8 个字母需要按下的 k + 1 次,得到答案:

4k (k + 1) + (n mod 8)(k + 1) = (4k + n mod 8)(k + 1)

作为力扣的算法题解,数学的部分在文章里说明白了即可,代码中不带注释也正常。而我想在实践中写这样的代码时,是需要补充对公式化简的注释说明的,因此在这里抛砖引玉,先给出我的改进:

public int minimumPushes(String word) {int n = word.length();int k = n / 8;// 8 * (1 + 2 + ... + k) + (n % 8) * (k + 1) = (k * 4 + n % 8) * (k + 1)return (k * 4 + n % 8) * (k + 1);
}

GPT-4 的简化

另外,附上 GPT-4 对题解的简化结果,我认为是相对更晦涩的,不建议采用:

public int minimumPushes(String word) {int length = word.length();if (length <= 8) return length;int basePushes = 8; // 第一个8字符需要8次按键length -= 8; // 减去第一部分的长度int extraPushes = 2; // 超过8个字符后,每增加1个字符,按键次数增加的倍数从2开始while (length > 8) {basePushes += 8 * extraPushes; // 按当前倍数增加按键次数length -= 8; // 减去处理过的长度extraPushes++; // 增加倍数}basePushes += length * extraPushes; // 处理剩余长度return basePushes;
}

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

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

相关文章

代码随想录算法训练营第36天—动态规划04 | ● 背包问题 ● 01背包 (二维数组解法和滚动数组解法) ● *416. 分割等和子集

背包问题 常见的背包问题类型&#xff08;大厂面试重点掌握01背包和完全背包即可&#xff09;题目描述&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品能用*次&#xff0c;求解怎么装物品使得装入…

识别恶意IP地址的有效方法

在互联网的环境中&#xff0c;恶意IP地址可能会对网络安全造成严重威胁&#xff0c;例如发起网络攻击、传播恶意软件等。因此&#xff0c;识别恶意IP地址是保护网络安全的重要一环。IP数据云将探讨一些有效的方法来识别恶意IP地址。 IP地址查询&#xff1a;https://www.ipdata…

面试几个问题总结

如何保证MQ高可用 RabbitMQ 高可用性保证: 镜像队列(Mirrored Queues) 镜像集群模式:这是RabbitMQ中最常用的实现高可用的方式。在一个镜像队列中,同一队列会被复制到多个节点上,形成一个镜像队列集合。当其中一个节点故障时,其他拥有相同队列镜像的节点可以继续提供服…

代码随想录算法训练营第七天| 344.反转字符串,541.反转字符串Ⅱ,卡码网:54.替换数字,151.翻转字符串里的单词,卡码网:55.右旋转字符串

344.反转字符串 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;字符串基础操作&#xff01; | LeetCode&#xff1a;344.反转字符串_哔哩哔哩_bilibili 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 无 时间复杂度: O(n)空间复…

S5PV210_视频编解码项目_裸机开发:实现按键的外部中断处理

加粗样式本文所作内容&#xff1a; 基于S5PV210芯片实现按键的外部中断处理程序&#xff0c;搭建中断处理流程框架 S5PV210对于中断处理的操作流程 1 外部中断得到触发&#xff1a; 1&#xff09;外部中断在初始化阶段得到使能 2&#xff09;外界达到了外部中断的触发条件 …

汉诺塔问题代码写法的详细解析

汉诺塔游戏规则&#xff1a; 规则&#xff1a; 汉诺塔问题是一个经典的问题。汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着…

有来团队后台项目-解析3

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、引入Elment-plus安装element-plus安装icons修改tsconfig.json (可选)配置按需自动引入验证是否导入成功展示效果typings 文件夹里生成两个文件总结一、引入Elment-plus elementplus 安装el…

30天学会QT(进阶)--------------第二天(创建项目)

1、如何规范的创建一个项目 由于本人也是从其他的项目上学来的&#xff0c;所以也不算是业界规范&#xff0c;每个公司或者个人都有自己的方式去创建项目&#xff0c;项目的创建是本着简洁&#xff0c;明了&#xff0c;方便而言的&#xff0c;所以对于我来说&#xff0c;不繁琐…

案例--某站视频爬取

众所周知&#xff0c;某站的视频是&#xff1a; 由视频和音频分开的。 所以我们进行获取&#xff0c;需要分别获得它的音频和视频数据&#xff0c;然后进行音视频合并。 这么多年了&#xff0c;某站还是老样子&#xff0c;只要加个防盗链就能绕过。&#xff08;防止403&#xf…

蓝桥杯刷题(五)

[蓝桥杯 2022 省 B] 刷题统计 题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a a…

RocketMQ学习笔记三(面试题)

【RocketMQ面试题&#xff08;23道&#xff09;】-CSDN博客 ------------------------------------------------------------------------------------------------ 最好的学习资源在官网&#xff1a;初识RocketMQ | RocketMQ (apache.org) 以下内容来源于官网哦。 基本概念…

fs模块 文件写入 之 追加写入

文件的同步、异步追加写入&#xff1a; 一、异步追加 &#xff08;1&#xff09;语法&#xff1a;fs.appendFile(path,data,[options],callback(data,err)) &#xff08;2&#xff09;操作 1》引入fs模块 const fsrequire(fs); 2》调用appendFile fs.appendFile(./我可以…

大数据开发(HBase面试真题-卷一)

大数据开发&#xff08;HBase面试真题&#xff09; 1、请解释Hive和HBase之间的主要区别&#xff1f;2、描述一下Apache HBase与关系数据库之间有何区别&#xff1f;3、简要介绍HDFS和HBase&#xff0c;并描述它们适用的场景。4、HBase Column Family的概念是什么&#xff1f;5…

如何发现并防范“隐蔽式”CC攻击

网络安全是当今互联网时代不可忽视的重要议题。随着科技的发展&#xff0c;黑客渗透技术也日益复杂和潜在危险。德迅云安全为用户提供全方位的保护&#xff0c;确保用户信息安全 http&https是什么&#xff1f; HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超…

学python新手如何安装pycharm;python小白如何安装pycharm

首先找到官网&#xff1a; Download PyCharm: The Python IDE for data science and web development by JetBrains 打开后选择下载&#xff0c;下图标红部分 点击exe程序&#xff0c;点击下一步&#xff01; 选择安装路径&#xff0c;下一步 弹出界面全选 选择默认 然后直接…

前端面试练习24.3.13

1.请描述下对vue生命周期的理解 Vue 组件的生命周期是指组件从创建、挂载到销毁的整个过程中所经历的一系列钩子函数的调用顺序。 在vue3 中&#xff0c;我们使用了组合式的API&#xff0c;使用了setup语法糖&#xff0c;提供了更灵活的方式来组织组件的逻辑&#xff0c;不再依…

Java基于微信小程序的校园生活互助小助手

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

小米官网登录注册的滑动效果

小米官网登录注册的滑动效果 登录组成页面 <div class"client"><div class"userbox"><div class"title"><a href"javascript:;" class"active" id"DL">登录</a><a href&quo…

Android工具adb下载安装环境配置详细教程

Android工具adb的下载安装与环境配置详细教程如下&#xff1a; 一、下载ADB ADB通常作为Android SDK的一部分提供&#xff0c;因此&#xff0c;您可以从Android开发者网站下载Android Studio&#xff0c;并在安装时选择包括ADB。 另外&#xff0c;您也可以通过官方下载地址直…

使用tui-image-editor 图片编辑 标注图片

需求背景&#xff1a; 鼠标悬浮在图片上 出现编辑按钮 点击编辑 对该图片进行编辑&#xff08;输入文案、涂鸦、标记、裁剪等&#xff09; 可以体验一下它线上编辑器 Image-editor | TOAST UI :: Make Your Web Delicious! 使用 首先在你的前端项目中安装&#xff1a; np…