【leetcode】909. Snakes and Ladders
题目如下:
解题思路:天坑题,不在于题目多难,而是要理解题意。题目中有两点要特别注意,一是“You choose a destination square S
with number x+1
, x+2
, x+3
, x+4
, x+5
, or x+6
, provided this number is <= N*N
.” 这里最大可以移动的x+6中的6真的就是数字6啊,不是例子中的N=6的6,可以理解成是掷骰子。二是“Note that you only take a snake or ladder at most once per move: if the destination to a snake or ladder is the start of another snake or ladder, you do not continue moving. ” 这里的意思是不能连续坐梯子,例如如果一个数字是通过梯子到达的,那么即使这个数字本身有梯子,也不能继续坐了,必须移动x+1~x+6中的某一步。理解了题意后,其实这题就非常简单了,DFS或者BFS都行。
代码如下:
class Solution(object):
def getLadderDestination(self,v,N):
for i in range(1,N+1):
if v <= i*N:
break
r = N-i
if (i) % 2 == 1:
c = v - ((i-1)*N + 1)
else:
c = i*N - v
return (r,c) def snakesAndLadders(self, board):
"""
:type board: List[List[int]]
:rtype: int
"""
N = len(board)
#endPosition = None
if N % 2 == 0:
endPosition = (0,0)
else:
endPosition = (0,N-1)
visit = [[N*N+1] * N for i in range(N)]
queue = [(1,0)]
visit[N-1][0] = 0
while len(queue) > 0:
v,step = queue.pop(0)
#x,y = self.getLadderDestination(v,N)
#visit[x][y] = min(visit[x][y],step)
for i in range(v+1,min(N*N,v+6)+1):
x,y = self.getLadderDestination(i,N)
if board[x][y] > 0:
ladder_x, ladder_y = self.getLadderDestination(board[x][y], N)
if board[ladder_x][ladder_y] == 44:
pass
if visit[ladder_x][ladder_y] > step + 1:
queue.append((board[x][y], step + 1))
visit[ladder_x][ladder_y] = min(step + 1, visit[ladder_x][ladder_y])
elif visit[x][y] > step+1:
queue.append((i, step + 1))
visit[x][y] = min(visit[x][y],step+1)
#print visit
return visit[endPosition[0]][endPosition[1]] if visit[endPosition[0]][endPosition[1]] != N*N+1 else -1
【leetcode】909. Snakes and Ladders的更多相关文章
- 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
[LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...
- 【Leetcode】Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
- 53. Maximum Subarray【leetcode】
53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...
- 27. Remove Element【leetcode】
27. Remove Element[leetcode] Given an array and a value, remove all instances of that value in place ...
- 【刷题】【LeetCode】007-整数反转-easy
[刷题][LeetCode]总 用动画的形式呈现解LeetCode题目的思路 参考链接-空 007-整数反转 方法: 弹出和推入数字 & 溢出前进行检查 思路: 我们可以一次构建反转整数的一位 ...
- 【刷题】【LeetCode】000-十大经典排序算法
[刷题][LeetCode]总 用动画的形式呈现解LeetCode题目的思路 参考链接 000-十大经典排序算法
- 【leetcode】893. Groups of Special-Equivalent Strings
Algorithm [leetcode]893. Groups of Special-Equivalent Strings https://leetcode.com/problems/groups-o ...
- 【leetcode】657. Robot Return to Origin
Algorithm [leetcode]657. Robot Return to Origin https://leetcode.com/problems/robot-return-to-origin ...
- 【leetcode】557. Reverse Words in a String III
Algorithm [leetcode]557. Reverse Words in a String III https://leetcode.com/problems/reverse-words-i ...
随机推荐
- Python"sorted()"和".sort()"的区别
sorted(A-LIST)会返回一个新的object,不改变**A-LIST*本身. A-LIST.sort()会直接改变A-List,不产生新的object.
- 命令行启动appium服务
Android终端 appium --avd test -a 127.0.0.1 -p 4723 --language "zh_CN" --locale "CN" ...
- mysql 查询所有子节点
SELECT t3.college_code FROM ( SELECT t1.college_code, IF ( find_in_set( t1.parent_org_code, , ) AS i ...
- HDU 6058 Kanade's sum —— 2017 Multi-University Training 3
Kanade's sum Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- 【SPOJ1811】Longest Common Substring(后缀自动机)
题意:给定两个仅含小写字母的字符串,求他们最长公共子串的长度 n<=250000 思路: #include<bits/stdc++.h> using namespace std; t ...
- Sumdiv
题目链接 题意:求a^b的所有约数之和mod9901. 思路:因为一个数A能够表示成多个素数的幂相乘的形式.即A=(a1^n1)*(a2^n2)*(a3^n3)...(am^nm).所以这个题就是要求 ...
- bugku | sql注入2
http://123.206.87.240:8007/web2/ 全都tm过滤了绝望吗? 提示 !,!=,=,+,-,^,% uname=admin&passwd=1' and '1 : 一个 ...
- 2018-2019-2 20175307实验三《敏捷开发与XP实践》实验报告
实验三 敏捷开发与XP实践-1 1.仔细学习了http://www.cnblogs.com/rocedu/p/4795776.html,发布了一篇关于Google的Java编码的博客,具体内容就不在这 ...
- Scribd每月共有超过两亿个访客、累积数亿篇以上的文件档案,Alexa全球排名200以内
目前已登上世界300大网站,每月共有超过两亿个访客.累积数亿篇以上的文件档案.透过Flash介面的阅读器-iPaper,使用者可以在网站内浏览各种文件,由于该网站是一个文件分享平台,所有的文件都是由使 ...
- webpack 中vue文件使用scss需要注意的地方
需要使用npm添加node_sass和sass_loader 并且在配置文件中添加规则: { test: /\.scss$/, use: ["style-loader", &quo ...