Leetcode 3609. Minimum Moves to Reach Target in Grid

  • Leetcode 3609. Minimum Moves to Reach Target in Grid
    • 1. 解題思路
    • 2. 代碼實現
  • 題目鏈接:3609. Minimum Moves to Reach Target in Grid

1. 解題思路

這一題我一開始走岔了,走了一個正向遍歷走法的思路,無論怎么剪枝都一直超時。后來看了一下答案之后發現,這道題核心是倒推,而且事實上根據結果點的狀態,走法事實上是唯一的。

下面,我們就來考察一下具體的走法。

假設當前的點為(x,y)(x, y)(x,y),其有三種狀態:

  1. x<yx < yx<y
  2. x>yx > yx>y
  3. x=yx = yx=y

顯然,其對應的走法一共有六種,且走完之后的新坐標x′,y′x', y'x,y的關系如下:

  1. x<yx < yx<y
    • x′=x+yx'=x+yx=x+yy′=yy'=yy=y,此時有y′<x′<2y′y' < x' < 2y'y<x<2y
    • x′=xx'=xx=xy′=x+yy'=x+yy=x+y,此時有y′>2x′y' > 2x'y>2x
  2. x>yx > yx>y
    • x′=x+yx'=x+yx=x+yy′=yy'=yy=y,此時有x′>2y′x' > 2y'x>2y
    • x′=xx'=xx=xy′=x+yy'=x+yy=x+y,此時有x′<y′<2x′x' < y' < 2x'x<y<2x
  3. x=yx = yx=y
    • x′=x+yx'=x+yx=x+yy′=yy'=yy=y,此時有x′=2y′x' = 2y'x=2y
    • x′=xx'=xx=xy′=x+yy'=x+yy=x+y,此時有y′=2x′y' = 2x'y=2x

由此,我們根據當前的位置(x′,y′)(x', y')(x,y),必然可以唯一地推導出上一步的位置(x,y)(x,y)(x,y)

然后我們只需要倒推看看能否回到(sx,sy)(sx, sy)(sx,sy)點即可。

2. 代碼實現

給出python代碼實現如下:

class Solution:def minMoves(self, sx: int, sy: int, tx: int, ty: int) -> int:if sx == 0 and sy == 0:return 0 if tx == 0 and ty == 0 else -1ans = 0while tx >= sx and ty >= sy:if tx == sx and ty == sy:return ansif ty == tx:if sx > 0 and sy > 0:return -1if sx == 0:tx -= tyelse:ty -= txelif tx >= 2 * ty:if tx % 2 == 1:return -1tx = tx // 2elif ty < tx < 2 * ty:tx -= tyelif tx < ty < 2 * tx:ty = ty - txelif ty >= 2 * tx:if ty % 2 == 1:return -1ty = ty // 2ans += 1return ans if tx == sx and ty == sy else -1

提交代碼評測得到:耗時3ms,占用內存17.61MB。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88037.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

工作流引擎:IDEA沒有actiBPMN插件怎么辦?

文章目錄一、問題描述二、替代方案一、問題描述 我們在學習activiti7工作流引擎的時候&#xff0c;需要設計流程圖。 一般推薦的就是使用IDEA插件actiBPMN進行開發。 但是&#xff0c;這個插件在IDEA2019后的版本都不在支持。 也就是搜不到 那么&#xff0c;怎么辦了&#x…

Android音視頻探索之旅 | CMake基礎語法 創建支持Ffmpeg的Android項目

一.CMake語法 CMake語法非常多&#xff0c;我們知道如何導入靜態庫和動態庫以及最基礎的使用&#xff0c;目前是夠用的。其它方面則根據實際項目同步學習。 1.1.基礎語法-常用 cmake_minimum_required&#xff1a;指定cmake最小版本include_directories&#xff1a;引入&#x…

React Native 初始化項目和模擬器運行

中文官方文檔&#xff1a;https://reactnative.cn/docs/environment-setup 英文官方文檔&#xff1a;https://reactnative.dev/docs/getting-started-without-a-framework#step-1-creating-a-new-application 創建新項目 1、初始化 # 如果你之前全局安裝過舊的react-native-cli…

20250706-5-Docker 快速入門(上)-創建容器常用選項_筆記

一、創建容器常用選項&#xfeff;&#xfeff;1. 創建容器常用選項&#xfeff;1&#xff09;常用選項創建容器常用選項&#xfeff;交互式選項&#xff1a;-i&#xff1a;保持標準輸入打開&#xff0c;允許交互式操作-t&#xff1a;分配偽終端&#xff0c;使容器像傳統終端一…

插值與擬合(3):B樣條曲線

在路徑規劃問題中&#xff0c;通常會用到B樣條來平滑路徑&#xff0c;本文實現并封裝了三次準均勻開放B樣條曲線&#xff0c;供大學學習使用。作者提供了三套代碼方案。可以用于不同平臺&#xff1a;方案1&#xff1a;MATLAB&#xff1b;方案2&#xff1a;標準C&#xff1b;方案…

[免費]基于Python豆瓣電影數據分析及可視化系統(Flask+echarts+pandas)【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的于Python豆瓣電影數據分析及可視化系統(Flaskechartpandas)【論文源碼SQL腳本】&#xff0c;分享下哈。項目介紹隨著如今電影越來越多&#xff0c;各種各樣的爛片和撈錢的商業片也層出不窮&#xff0c;而有意…

SQL127 月總刷題數和日均刷題數

SQL127 月總刷題數和日均刷題數 withtemp as (selectDATE_FORMAT(submit_time, "%Y%m") as submit_month,count(question_id) as month_q_cnt,round(count(question_id) / day(last_day(max(submit_time))),3) as avg_day_q_cntfrompractice_recordwhereyear(submit…

unity luban接入

1.找到luban官網并下載他的例子和.net8.0的sdk安裝 官網地址如下 快速上手 | Luban 參考大佬教程如下 Luban新版本接入教程_嗶哩嗶哩_bilibili 2.找到他的luban_examples-main示例下的兩個文件MiniTemplate和tool 3.MiniTemplate這個文件復制一份到項目工程下&#xff0c;自…

Django服務開發鏡像構建

最后完整的項目目錄結構1、安裝依賴pip install django django-tables2 django-filter2、創建項目和主應用django-admin startproject configcd configpython manage.py startapp dynamic_models3、配置settings.py將項目模塊dynamic_models加入進來&#xff0c;django_tables2…

20250706-3-Docker 快速入門(上)-常用鏡像管理命令_筆記

一、配置加速器&#xfeff;1. Docker Hub簡介與地址&#xfeff;公共鏡像倉庫: 由Docker公司維護的公共鏡像倉庫&#xff0c;包含大量容器鏡像默認下載源: Docker工具默認從這個公共鏡像庫下載鏡像訪問地址: https://hub.docker.com鏡像搜索功能: 可通過瀏覽器訪問圖形化管理系…

【unity游戲開發——優化篇】使用Occlusion Culling遮擋剔除,只渲染相機視野內的游戲物體提升游戲性能

注意&#xff1a;考慮到優化的內容比較多&#xff0c;我將該內容分開&#xff0c;并全部整合放在【unity游戲開發——優化篇】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言實戰1、確保所有靜止的3D物體都標記為Occluder Static靜態遮擋體和Occludee …

通用業務編號生成工具類(MyBatis-Plus + Spring Boot)詳解 + 3種調用方式

在企業應用開發中&#xff0c;我們經常需要生成類似 BZ -240704-0001 這種“業務編號”&#xff0c;它通常具有以下特點&#xff1a;前綴&#xff1a;代表業務類型&#xff0c;如 BZ 表示包裝日期&#xff1a;年月日格式&#xff0c;通常為 yyMMdd序列號&#xff1a;當天內遞增…

前端相關性能優化筆記

1.打開速度怎么變快 - 首屏加載優化2.再次打開速度怎么變快 - 緩存優化了3.操作怎么才順滑 - 渲染優化4.動畫怎么保證流暢 - 長任務拆分2.1 首屏加載指標細化:1.FP(First Paint 首次繪制) 2.FCP(First contentful Paint 首次內容繪制)&#xff0c;FP 到 FCP 中間其實主要是 SPA…

7.7晚自習作業

實操作業02&#xff1a;Spark核心開發 作業說明 請嚴格按照步驟操作&#xff0c;并將最終結果文件&#xff08;命名為&#xff1a;sparkcore_result.txt&#xff09;于20點前上傳。結果文件需包含每一步的關鍵命令執行結果文本輸出。 一、數據讀取與轉換操作 上傳賬戶數據$…

手機FunASR識別SIM卡通話占用內存和運行性能分析

手機FunASR識別SIM卡通話占用內存和運行性能分析 --本地AI電話機器人 上一篇&#xff1a;手機無網離線使用FunASR識別SIM卡語音通話內容 下一篇&#xff1a;手機通話語音離線ASR識別商用和優化方向 一、前言 書接上一文《阿里FunASR本地斷網離線識別模型簡析》&#xff0c;…

虛幻引擎Unreal Engine5恐怖游戲設計制作教程,從入門到精通從零開始完整項目開發實戰詳細講解中英字幕

和大家分享一個以前收集的UE5虛幻引擎恐怖游戲開發教程&#xff0c;這是國外一個大神制作的視頻教程&#xff0c;教程從零開始到制作出一款完整的游戲。內容講解全面&#xff0c;如藍圖基礎知識講解、角色控制、高級交互系統、高級庫存系統、物品檢查、恐怖環境氛圍設計、過場動…

多人協同開發時Git使用命令

拉取倉庫代碼 # 拉取遠程倉庫至本地tar_dir路徑 git clone gitgithub.com:your-repo.git target_dir # 默認是拉取遠程master分支&#xff0c;下面拉取并切換到自己需要開發的分支上 # 假設自己需要開發的分支是/feature/my_branch分支 git checkout -b feature/my_branch orig…

線性表——雙向鏈表

線性表——雙向鏈表1. 雙向鏈表的實現1.1 簡單圖例1.2 結點的定義1.3 新結點的創建1.4 鏈表的初始化1.5 結點的插入1.5.1 頭部插入&#xff08;頭插&#xff09;1.5.2 尾部插入&#xff08;尾插&#xff09;1.5.3 任意位置&#xff08;前&#xff09;插入1.6 結點的刪除1.6.1 頭…

Java后端技術博客匯總文檔

文章目錄 前言Java后端匯總鏈接Java基礎知識點數據結構算法&#xff08;Java實現&#xff09;算法知識點合集算法刷題算法競賽AcWing課程藍橋杯AB組輔導課合集&#xff08;更新中…&#xff09; 源碼分析redission 數據庫SQL ServerMySQLRedis -Canal JUC并發編程JVMNetty日志框…

QT 菜單欄設計使用方法

目錄 常用設置函數 多個QAction的單選設置 ???????菜單相關類 ??????? 系統菜單的生成和響應 使用代碼添加系統菜單 使用UI設計器設計系統菜單 使用Qt設計及界面時&#xff0c;常用的兩種方式添加菜單&#xff0c;第一使用UI界面添加&#xff0c;第二種 在…