【leetcode】403. Frog Jump

本文介绍了一个跳跃游戏问题的算法解决方案,通过使用字典记录每个石头可达的单位距离,实现了从起点到终点的有效路径查找。

题目如下:

 

解题思路:我的做法是建立一个字典dic,key为stone,value是一个set,里面存的是从前面的所有stone跳跃到当前stone的unit集合。例如stones=[0,1,2,3]。stone3可以从stone1跳跃两步得到或者从stone2跳跃1步得到,所有dic[3] = (2,1)。那么从stone3可以跳的unit就是[1,2,3] (set中每个元素+1或者-1得到),通过stone3就能到达stone4,stone5,stone6。这样只要按顺序遍历stones,最后判断len(dic[stones[-1]]是否大于0即可。

代码如下:

class Solution(object):
    def canCross(self, stones):
        """
        :type stones: List[int]
        :rtype: bool
        """
        dic = {}
        for i in stones:
            dic[i] = set()
        dic[0].add(1)
        for i in stones:
            for j in dic[i]:
                if j+i in dic:
                    dic[j+i].add(j)
                if i != 0 and j+i+1 in dic:
                    dic[j+i+1].add(j+1)
                if  j-1 > 0 and j + i - 1 in dic:
                    dic[j + i - 1].add(j - 1)
        #print dic
        return len(dic[stones[-1]]) > 0

 

转载于:https://www.cnblogs.com/seyjs/p/9177565.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值