leetcode 909. 蛇梯棋

題目

N x N 的棋盤?board 上,按從?1 到 N*N?的數字給方格編號,編號 從左下角開始,每一行交替方向。

例如,一塊 6 x 6 大小的棋盤,編號如下:

image.png

r 行 c 列的棋盤,按前述方法編號,棋盤格中可能存在 “蛇” 或 “梯子”;如果 board[r][c] != -1,那個蛇或梯子的目的地將會是 board[r][c]。

玩家從棋盤上的方格?1 (總是在最后一行、第一列)開始出發。

每一回合,玩家需要從當前方格 x 開始出發,按下述要求前進:

選定目標方格:選擇從編號 x+1,x+2,x+3,x+4,x+5,或者 x+6 的方格中選出一個目標方格 s ,目標方格的編號 <= N*N。
該選擇模擬了擲骰子的情景,無論棋盤大小如何,你的目的地范圍也只能處于區間 [x+1, x+6] 之間。
傳送玩家:如果目標方格 S 處存在蛇或梯子,那么玩家會傳送到蛇或梯子的目的地。否則,玩家傳送到目標方格 S。?
注意,玩家在每回合的前進過程中最多只能爬過蛇或梯子一次:就算目的地是另一條蛇或梯子的起點,你也不會繼續移動。

返回達到方格 N*N 所需的最少移動次數,如果不可能,則返回 -1。

示例:

輸入:[
[-1,-1,-1,-1,-1,-1],
[-1,-1,-1,-1,-1,-1],
[-1,-1,-1,-1,-1,-1],
[-1,35,-1,-1,13,-1],
[-1,-1,-1,-1,-1,-1],
[-1,15,-1,-1,-1,-1]]
輸出:4
解釋:
首先,從方格 1 [第 5 行,第 0 列] 開始。
你決定移動到方格 2,并必須爬過梯子移動到到方格 15。
然后你決定移動到方格 17 [第 3 行,第 5 列],必須爬過蛇到方格 13。
然后你決定移動到方格 14,且必須通過梯子移動到方格 35。
然后你決定移動到方格 36, 游戲結束。
可以證明你需要至少 4 次移動才能到達第 N*N 個方格,所以答案是 4。

解題思路

  • 因為棋盤的編號是蛇形的,所以通過蛇形遍歷,可以按編號順序從小到大遍歷一次,當遇到不是-1的點時,使用map記錄該編號下可以跳轉的下一個點
  • 使用廣度優先搜索,從編號為1的點開始遍歷,每一步可以從編號 x+1,x+2,x+3,x+4,x+5,或者 x+6 的方格中選出一個目標方格 s,通過map可以查出跳轉到的下一個編號(如果存在蛇或梯子的話)

代碼

class Solution {public int snakesAndLadders(int[][] board) {int n=board.length,cur=1;boolean flag=true;Map<Integer,Integer>map=new HashMap<>();for (int i=n-1;i>=0;i--){if(flag){for (int j=0;j<n;j++,cur++){if(board[i][j]!=-1)map.put(cur,board[i][j]);}flag=false;}else {for (int j=n-1;j>=0;j--,cur++){if(board[i][j]!=-1)map.put(cur,board[i][j]);}flag=true;}}Queue<Integer>queue=new LinkedList<>();queue.add(1);Set<Integer>set=new HashSet<>();set.add(1);int res=0;while (!queue.isEmpty()){int size=queue.size();for (int i=0;i<size;i++){int c=queue.poll();if(c==n*n) return res;for(int k=1;k<=6;k++){int now=c+k;if(map.containsKey(now))now=map.get(now);if(!set.contains(now))queue.add(now);set.add(now);}}res++;}return -1;}
}

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

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

相關文章

Python基礎之window常見操作

一、window的常見操作&#xff1a; cd c:\ #進入C盤d: #從C盤切換到D盤 cd python #進入目錄cd .. #往上走一層目錄dir #查看目錄文件列表cd ../.. #往上上走一層目錄 二、常見的文件后綴名&#xff1a; .txt 記事本文本文件.doc word文件.xls excel文件.ppt PPT文件.exe 可執行…

WPF效果(GIS三維篇)

二維的GIS已經被我玩爛了&#xff0c;緊接著就是三維了&#xff0c;哈哈&#xff01;先來看看最簡單的效果&#xff1a; 轉載于:https://www.cnblogs.com/OhMonkey/p/8954626.html

css注釋_CSS注釋示例–如何注釋CSS

css注釋Comments are used in CSS to explain a block of code or to make temporary changes during development. The commented code doesn’t execute.CSS中使用注釋來解釋代碼塊或在開發過程中進行臨時更改。 注釋的代碼不執行。 Both single and multi-line comments in…

r軟件時間序列分析論文_高度比較的時間序列分析-一篇論文評論

r軟件時間序列分析論文數據科學 &#xff0c; 機器學習 (Data Science, Machine Learning) In machine learning with time series, using features extracted from series is more powerful than simply treating a time series in a tabular form, with each date/timestamp …

leetcode 168. Excel表列名稱

題目 給你一個整數 columnNumber &#xff0c;返回它在 Excel 表中相對應的列名稱。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1&#xff1a; 輸入&#xff1a;columnNumber 1 輸出&#xff1a;“A” 示例 2&…

飛機訂票系統

1 #include <stdio.h>2 #include <stdlib.h>3 #include <string.h>4 #include <conio.h>5 typedef struct flightnode{6 char flight_num[10]; //航班號7 char start_time[10]; //起飛時間8 char end_time[10]; //抵達時間9 char st…

解決Mac10.13 Pod報錯 -bash: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.fram

升級10.13以后Pod命令失效&#xff0c;解決辦法如下&#xff1a; 終端執行 brew link --overwrite cocoapods 復制代碼嘗試 Pod 命令是否已經恢復 若報錯繼續執行 brew reinstall cocoapodsbrew install rubybrew link --overwrite cocoapods 復制代碼嘗試 Pod 命令是否已經恢復…

angular示例_用示例解釋Angular動畫

angular示例為什么要使用動畫&#xff1f; (Why use Animations?) Modern web components frequently use animations. Cascading Style-sheets (CSS) arms developers with the tools to create impressive animations. Property transitions, uniquely named animations, mu…

selenium抓取_使用Selenium的網絡抓取電子商務網站

selenium抓取In this article we will go through a web scraping process of an E-Commerce website. I have designed this particular post to be beginner friendly. So, if you have no prior knowledge about web scraping or Selenium you can still follow along.在本文…

劍指 Offer 37. 序列化二叉樹

題目 序列化是將一個數據結構或者對象轉換為連續的比特位的操作&#xff0c;進而可以將轉換后的數據存儲在一個文件或者內存中&#xff0c;同時也可以通過網絡傳輸到另一個計算機環境&#xff0c;采取相反方式重構得到原數據。 請設計一個算法來實現二叉樹的序列化與反序列化…

ie8 ajaxSubmit 上傳文件提示下載

轉載 解決ie下ajaxsubmit上傳文件提示下載文件問題 主要是應為放回類型為json&#xff0c;返回text/html轉載于:https://www.cnblogs.com/yang-C-J/p/8963278.html

一個簡單的 js 時間對象創建

JS中獲取時間很常見&#xff0c;湊湊熱鬧&#xff0c;也獲取一個時間對象試試 首先&#xff0c;先了解js的獲取時間函數如下&#xff1a; var myDate new Date(); //創建一個時間對象 myDate.getYear(); // 獲取當前年份&#xff08;2位&#x…

裁判打分_內在的裁判偏見

裁判打分News flash: being an umpire is hard. Their job is to judge whether a ball that’s capable of moving upwards of 100 MPH or breaking 25 inches crossed through an imaginary zone before being caught. I don’t think many would argue that they have it ea…

數據庫sql課程設計_SQL和數據庫-初學者完整課程

數據庫sql課程設計In this course, Mike Dane will teach you database management basics and SQL.在本課程中&#xff0c;Mike Dane將教您數據庫管理基礎知識和SQL。 The course starts off with Mike helping you install MySQL on Windows or Mac. Then he explores topic…

LCP 07. 傳遞信息

小朋友 A 在和 ta 的小伙伴們玩傳信息游戲&#xff0c;游戲規則如下&#xff1a; 有 n 名玩家&#xff0c;所有玩家編號分別為 0 &#xff5e; n-1&#xff0c;其中小朋友 A 的編號為 0 每個玩家都有固定的若干個可傳信息的其他玩家&#xff08;也可能沒有&#xff09;。傳信息…

微信公眾號自動回復加超鏈接最新可用實現方案

你在管理微信號時是否會有自動回復或者在關鍵字觸發自動回復加一個超鏈接的需求呢&#xff1f;例如下圖像王者榮耀這樣&#xff1a; 很多有開發經驗的朋友都知道微信管理平臺會類似富文本編輯器&#xff0c;第一想到的解決方案會是在編輯框中加<a href網址 >顯示文字<…

devops開發模式流程圖_2020 Web開發人員路線圖–成為前端,后端或DevOps開發人員的視覺指南

devops開發模式流程圖There are many ways you can go about picking up the skills you need to become a developer.您可以采用多種方法掌握成為開發人員所需的技能。 There are linear curriculums that teach you a bit of everything - like freeCodeCamps full stack de…

從Jupyter Notebook切換到腳本的5個理由

意見 (Opinion) 動機 (Motivation) Like most people, the first tool I used when started learning data science is Jupyter Notebook. Most of the online data science courses use Jupyter Notebook as a medium to teach. This makes sense because it is easier for be…

leetcode 1833. 雪糕的最大數量

夏日炎炎&#xff0c;小男孩 Tony 想買一些雪糕消消暑。 商店中新到 n 支雪糕&#xff0c;用長度為 n 的數組 costs 表示雪糕的定價&#xff0c;其中 costs[i] 表示第 i 支雪糕的現金價格。Tony 一共有 coins 現金可以用于消費&#xff0c;他想要買盡可能多的雪糕。 給你價格…

MVC架構 -- 初學試水選課管理系統

項目文件網站地址&#xff1a;http://www.gegecool.cn:90/ 第一次對MVC 進行轉載于:https://www.cnblogs.com/wtusoso/p/8032120.html