当前位置: 首页 > 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;最短…...

3步解锁百度网盘满速下载:告别限速困扰的完整方案

3步解锁百度网盘满速下载&#xff1a;告别限速困扰的完整方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的非会员下载速度而烦恼吗&#xff1f;面对100KB/…...

Midjourney Chlorophyll印相实战手册(含独家--sref权重调优表与叶脉纹理增强公式)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney Chlorophyll印相的技术起源与美学范式 Chlorophyll印相并非传统暗房工艺的简单复刻&#xff0c;而是Midjourney V6模型在跨模态语义理解基础上&#xff0c;对植物色素光学响应机制进行算法化…...

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现 摘要 涂胶工艺在智能制造中具有广泛的应用,尤其在汽车制造、新能源电池封装等领域,其质量直接关系到产品的密封性、绝缘性和结构可靠性。传统的涂胶缺陷检测依赖人工目检或规则式机器视觉方法,存在效率低、精…...

仅限前500名获取|Midjourney Blackberry印相专业级Prompt模板包(含EXIF元数据模拟指令)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney Blackberry印相的美学溯源与技术本质 Blackberry印相&#xff08;Blackberry Photographic Process&#xff09;并非真实存在的传统暗房工艺&#xff0c;而是Midjourney社区中对一类高对比、…...

TimescaleDB Helm Charts 项目停止维护后的应对策略与迁移指南

1. 项目概述与背景如果你正在Kubernetes上寻找一种可靠、可扩展的方式来部署时序数据库&#xff0c;那么TimescaleDB的Helm Charts项目曾经是一个绕不开的选项。这个由Timescale官方维护的仓库&#xff0c;旨在为开发者提供一套标准化的、声明式的部署方案&#xff0c;让你能通…...

无人机安全测试终极实战指南:3大攻击向量深度解析与防护策略

无人机安全测试终极实战指南&#xff1a;3大攻击向量深度解析与防护策略 【免费下载链接】Drone-Hacking-Tool Drone Hacking Tool is a GUI tool that works with a USB Wifi adapter and HackRF One for hacking drones. 项目地址: https://gitcode.com/gh_mirrors/dr/Dron…...

量化研究实战:从数据到策略的Python框架与机器学习应用

1. 从零到一&#xff1a;量化研究实战框架搭建心路如果你和我一样&#xff0c;对金融市场既着迷又敬畏&#xff0c;总想用理性和数据去解读那些看似随机的价格波动&#xff0c;那么“量化研究”这个词对你来说一定不陌生。它听起来高大上&#xff0c;仿佛是高学历精英们在华尔街…...

构建现代化图片编辑器的Vue与Fabric.js实践指南

构建现代化图片编辑器的Vue与Fabric.js实践指南 【免费下载链接】vue-fabric-editor 快图设计-基于fabric.js和Vue的开源图片编辑器&#xff0c;可自定义字体、素材、设计模板。fabric.js and Vue based image editor, can customize fonts, materials, design templates. 项…...

Midjourney水彩风提示词已进入“语义过载”危机?2024Q2最新精简指令集发布(仅保留11个高响应关键词,准确率提升63.8%)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney水彩风提示词的语义过载现象本质解析 水彩风格生成中&#xff0c;“watercolor”、“gouache”、“loose brushstrokes”、“wet-on-wet”等提示词常被叠加使用&#xff0c;表面增强风格表征…...

信息安全工程师-主动防御体系核心技术:从监测溯源到隐私保护全解析

一、引言&#xff08;一&#xff09;技术定义与软考定位主动防御是相对于被动防御的安全理念&#xff0c;核心是通过主动诱捕、溯源标记、容忍恢复等技术&#xff0c;突破传统 “边界防护 事后补救” 的局限&#xff0c;实现攻击全生命周期的管控。本文涉及的数字水印、网络攻…...