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

字母板上的路径 题解,力扣官方出来挨打(小声)

  1. 字母板上的路径
    我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。
    在这里插入图片描述
    在本题里,字母板为board = [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”],如下所示。
    我们可以按下面的指令规则行动:
    如果方格存在,‘U’ 意味着将我们的位置上移一行;
    如果方格存在,‘D’ 意味着将我们的位置下移一行;
    如果方格存在,‘L’ 意味着将我们的位置左移一列;
    如果方格存在,‘R’ 意味着将我们的位置右移一列;
    ‘!’ 会把在我们当前位置 (r, c) 的字符 board[r][c] 添加到答案中。
    (注意,字母板上只存在有字母的位置。)
    返回指令序列,用最小的行动次数让答案和目标 target 相同。你可以返回任何达成目标的路径。

这道题在拿到的时候第一眼我想的是把所有字母到另一字母的路径全部通过遍历出来,然后存在一张map里,在通过Map拿,然后拼到答案里,但是这样的开销有些大,因为要做图搜索,且要遍历26*25次,所以图搜索的思路先放弃,绝对不是图搜索学得不好不会写什么的(世上无难事,只要肯放弃)_(:з」∠)_

那么就换个思路,开始找规律吧(早干啥了啊喂)。(╬ ̄皿 ̄)=○#( ̄#)3 ̄)

我们可以发现上面的图就是一个二维数组。以ai为例,a的坐标是[0,0],i的坐标是[1,4],alphabetBoardPath(“i”)=“URRRR!”
也就是说纵向移动,或者说是U和D在答案中的数量取决于ax-ix,横向移动,或者说是U和D在答案中的数量取决于ay-iy。
将a在26个英文字母中的顺序视为0,字母在图表中的x = 他在26个英文字母中的顺序/5(向下取整),y = 他在26个英文字母中的顺序%5。例如z,在字母中的顺序为25,x=25/5=5,y=25%5=0,z的坐标为[5,0]。(心机之蛙一直摸你肚子)
我们将规律转化一下可得一下代码:

    public String alphabetBoardPath(String target) {StringBuilder result = new StringBuilder();target = "a" + target;for (int i = 0; i < target.length() - 1; i++) {result.append(returnOperation((Integer) (target.charAt(i) - 'a'), (Integer) (target.charAt(i + 1) - 'a')));}return result.toString();}String returnOperation(int strat, int end) {StringBuilder result = new StringBuilder();int lateralMovement = strat % 5 - end % 5;int longitudinalMovement = strat / 5 - end / 5;for (int i = 0; i < Math.abs(longitudinalMovement); i++) {result.append(longitudinalMovement < 0 ? "D" : "U");}for (int i = 0; i < Math.abs(lateralMovement); i++) {result.append(lateralMovement < 0 ? "R" : "L");}result.append("!");return result.toString();}

然鹅,力扣竟然报错了:
在这里插入图片描述
输出:
“DDDDD!UUUUURRR!DDDDDLLL!”
预期结果:
“DDDDD!UUUUURRR!DDDDLLLD!”
我实在是百思不得其解,无论如何都看不出来我为啥错了。(¬‸¬) ?
于是去看了力扣官方给的答案:

    public String alphabetBoardPath(String target) {int cx = 0, cy = 0;StringBuilder res = new StringBuilder();for (int i = 0; i < target.length(); i++) {char c = target.charAt(i);int nx = (c - 'a') / 5;int ny = (c - 'a') % 5;if (nx < cx) {for (int j = 0; j < cx - nx; j++) {res.append('U');}}if (ny < cy) {for (int j = 0; j < cy - ny; j++) {res.append('L');}} if (nx > cx) {for (int j = 0; j < nx - cx; j++) {res.append('D');}}if (ny > cy) {for (int j = 0; j < ny - cy; j++) {res.append('R');}}  res.append('!');cx = nx;cy = ny;}return res.toString();}作者:LeetCode-Solution
链接:https://leetcode.cn/problems/alphabet-board-path/solution/zi-mu-ban-shang-de-lu-jing-by-leetcode-s-c30t/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

(╯’ - ‘)╯︵ ┻━┻
我猜了一下应该是因为路径的顺序,先赌他一手,按照ULDR的顺序返回。先把桌子摆好┬─┬ ノ(’-'ノ)
改出了以下代码:

    public String alphabetBoardPath(String target) {StringBuilder result = new StringBuilder();target = "a" + target;for (int i = 0; i < target.length() - 1; i++) {result.append(returnOperation((Integer) (target.charAt(i) - 'a'), (Integer) (target.charAt(i + 1) - 'a')));}return result.toString();}String returnOperation(int strat, int end) {StringBuilder result = new StringBuilder();int lateralMovement = strat % 5 - end % 5;int longitudinalMovement = strat / 5 - end / 5;for (int i = 0; i < longitudinalMovement; i++) {result.append("U");}for (int i = 0; i < lateralMovement; i++) {result.append("L");}for (int i = 0; i > longitudinalMovement; i--) {result.append("D");}for (int i = 0; i > lateralMovement; i--) {result.append("R");}result.append("!");return result.toString();}

不愧是你啊力扣,题目里说好的 你可以返回任何达成目标的路径。 呢。最后还是要按顺序返回。(╯°Д°)╯︵ ┻━┻

就酱,大家如果有更好的思路请务必和我讨论,下班下班★,°:.☆( ̄▽ ̄)/$:.°★

相关文章:

字母板上的路径 题解,力扣官方出来挨打(小声)

字母板上的路径 我们从一块字母板上的位置 (0, 0) 出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”]&#xff0c;如下所示。 我们可以按下面的指令规则行动&#xff1a…...

代码随想录算法训练营第二十六天 | 39. 组合总和,40.组合总和II,131.分割回文串

一、参考资料组合总和题目链接/文章讲解&#xff1a;https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1KT4y1M7HJ 组合总和II题目链接/文章讲解&#xff1a;https://programmercarl.com/004…...

vueday01-脚手架安装详细

一、vue脚手架安装命令npm i -g vue/cli 或 yarn global add vue/cli安装上面的工具&#xff0c;安装后运行 vue --version &#xff0c;如果看到版本号&#xff0c;说明安装成功或 vue -V工具安装好之后&#xff0c;就可以安装带有webpack配置的vue项目了。创建项目之前&#…...

初识cesium3d(一)

使用ViteVue3.2Cesium。Vite需要Node.js版本14.18及以上版本。Vite命令创建的工程会自动生成vite.config.js文件&#xff0c;来配置一些相关的参数。 1、使用Vite创建vue3项目 # npm npm init vitelatest cesium-app -- --template vue # yarn yarn create vite cesium-app…...

点云转3D网格【Python】

推荐&#xff1a;使用 NSDT场景设计器 快速搭建 3D场景。 在本文中&#xff0c;我将介绍我的 3D 表面重建过程&#xff0c;以便使用 Python 从点云快速创建网格。 你将能够导出、可视化结果并将结果集成到您最喜欢的 3D 软件中&#xff0c;而无需任何编码经验。 此外&#xff0…...

【OpenCV图像处理系列一】OpenCV开发环境的安装与搭建(Ubuntu + Window都适用)

&#x1f517; 运行环境&#xff1a;OpenCV&#xff0c;Ubuntu&#xff0c;Windows &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x…...

【代码随想录】-动态规划专题

文章目录理论基础斐波拉契数列爬楼梯使用最小花费爬楼梯不同路径不同路径 II整数拆分不同的二叉搜索树背包问题——理论基础01背包二维dp数组01背包一维数组&#xff08;滚动数组&#xff09;装满背包分割等和子集最后一块石头的重量 II目标和一和零完全背包零钱兑换 II组合总和…...

c++数据类型 输入输出

C++语法 //常用包: iostream:cin cout endl cstdio:scanf printf algorithm:max min reverse swap cstring:memset memcpymemset(a,-1,sizeof a) 填充数组memcpy(b,a,sizeof a) 将a数组复制到b数组,长度是a数组字节长度 cmath:sin sqrt pow abs fabs编程是一种控制计…...

【设计模式-11】责任链模式

认识设计模式&#xff08;十一&#xff09;---责任链模式【一】责任链模式【二】介绍&#xff08;1&#xff09;意图&#xff08;2&#xff09;主要解决&#xff08;3&#xff09;何时使用&#xff08;4&#xff09;如何解决&#xff08;5&#xff09;关键代码&#xff08;6&am…...

SpringBoot+Vue实现智能物流管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…...

【MT7628】MT7628如何修改串口波特率、调试串口物理口、使用UART3口

环境说明 sdk版本:Mediatek_ApSoC_SDK_4320_20150414.tar.bz2 芯片方案:MT7628A Uboot修改串口波特率方法 修改rt2880.h文件 修改include/configs/rt2880.h文件CONFIG_BAUDRATE宏的值 - #define CONFIG_BAUDRATE 57600 +#define CONFIG_BAUDRATE 115200 Kernel中修改串口波特…...

css盒模型介绍

在使用CSS进行网页布局时&#xff0c;我们一定离不开的一个东西————盒子模型。盒子模型&#xff0c;顾名思义&#xff0c;盒子就是用来装东西的&#xff0c;它装的东西就是HTML元素的内容。或者说&#xff0c;每一个可见的 HTML 元素都是一个盒子&#xff0c;下面所说的盒子…...

onetab 谷歌插件历史数据清除

文章目录方法1&#xff1a;测试也可以步骤1&#xff1a;批量执行点击步骤2&#xff1a;python 脚本模拟点击确定操作方法2&#xff1a;成功【推荐】步骤1&#xff1a;修改confirm&#xff0c;类似于hook操作步骤2&#xff1a;批量点击删除操作&#xff1a;onetab 谷歌插件历史数…...

GRBL源码简单分析

结构体说明 GRBL里面的速度规划是带运动段前瞻的&#xff0c;所以有规划运动段数据和微小运动段的区分 这里的“规划运动段”对应的数据结构是plan_block_t&#xff0c;前瞻和加减速会使用到&#xff0c;也就是通过解析G代码后出来的直接直线数据或是圆弧插补出来的拟合直线数据…...

第一部分:简单句——第一章:简单句的核心——二、简单句的核心变化(谓语动词的情态)

二、简单句的核心变化 简单句的核心变化其实就是 一主一谓&#xff08;n. v.&#xff09; 表达一件事情&#xff0c;谓语动词是其中最重要的部分&#xff0c;谓语动词的变化主要有四种&#xff1a;三态加一否&#xff08;时态、语态、情态、否定&#xff09;&#xff0c;其中…...

软考高级考试中有五大证书,其中哪个更值得考?

计算机软考属于专业技术人员职业资格水平评价类&#xff0c;是职业资格、专业技术资格&#xff08;职称&#xff09;和专业技术水平"三合一"的考试&#xff0c;是目前IT行业仅有的国家级考试。考试不受学历、专业、资历等条件限制。软考高级考试中有五大证书&#xf…...

FlexRay™ 协议控制器 (E-Ray)-04

网络管理 累积的网络管理 (NM) 向量位于网络管理寄存器 1 到网络管理寄存器 3 (NMVx (x = 1-3)) 中。【The accrued Network Management (NM) vector is located in the Network Management Register 1 to Network Management Register 3 (NMVx (x = 1-3)).】 网络管理向量 x…...

container_of 根据成员变量获得包含其的对象的地址!

写在前面 本系列文章的灵感出处均是各个技术书籍的读后感&#xff0c;详细书籍信息见文章最后的参考文献 CONTAINER_OF 在书中发现一个很有意思的宏&#xff0c;以此可以衍生出来其很多的用法&#xff0c;这个宏可以根据某个成员变量的地址得到包含这个成员变量地址的对象的…...

Linux进程概念

Linux进程概念前言冯诺依曼体系操作系统设计操作系统的目的如何理解OS是一款搞“管理”的软件&#xff1f;系统调用和库函数的概念进程的概念描述进程组织进程查看进程fork&#xff08;&#xff09;前言 本篇博客主要介绍一些&#xff1a;冯诺依曼体系、OS的理解、进程的一些概…...

算法设计与分析

两个例子:调度问题与投资问题 例1&#xff1a;调度问题 问题 有 n 项任务&#xff0c;每项任务加工时间已知.从 0时刻开始陆续安排到一台机器上加工. 每个任务的完成时间是从 0 时刻到任务加工截止的时间. 求: 总完成时间&#xff08;所有任务完成时间之和&#xff09;最短…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...