Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
给出一堆数字stones代表stones[i]处有石子,青蛙从第一个石子处出发,第一次必须跳1步,之后每次可以跳的步数为k-1~k+1,k为前一步跳的步数,问是否可达最后一个石子。
O(n^2)的dp,用dict存储stones位置,dict的value为跳到这个位置所有可能的上一步的长度,参考了Discussion -> https://leetcode.com/problems/frog-jump/solutions/3964842/python3-solution/


 1 #403
 2 #Runtime: 191 ms (Beats 50.94%)
 3 #Memory: 14.9 MB (Beats 79.25%)
 4 
 5 class Solution(object):
 6     def canCross(self, stones):
 7         """
 8         :type stones: List[int]
 9         :rtype: bool
10         """
11         n = len(stones)
12         dp = {stone:set() for stone in stones}
13         dp[0].add(0)
14         for i in range(n):
15             for j in dp[stones[i]]:
16                 for d in range(j - 1, j + 2):
17                     if d and stones[i] + d in dp:
18                         dp[stones[i] + d].add(d)
19         return len(dp[stones[-1]]) > 0

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理