美文网首页
8.21 - hard - 78

8.21 - hard - 78

作者: 健时总向乱中忙 | 来源:发表于2017-08-22 05:11 被阅读0次

403. Frog Jump
首先做出来一个TLE的版本,因为这里面要search三种情况,可以用记忆化搜索来做。

class Solution(object):
    def canCross(self, stones):
        """
        :type stones: List[int]
        :rtype: bool
        """
        if len(stones) <= 1:
            return True
        # dp[i][j] 通过一次跳j步,可以跳到stone i上
        dp = [[False for _ in range(2*len(stones))] for _ in range(len(stones))]
        dp[0][0] = True
        if stones[1] != 1:
            return False
        dp[1][1] = True
        for i in range(2, len(stones)):
            for k in range(1, i):
                for j in range(1, 2*len(stones)-1):
                    if dp[k][j]: #如果前一块石头用了j步可以达到
                        dp[i][j] = dp[i][j] or (stones[i] - stones[k]) == j
                        dp[i][j-1] = dp[i][j-1] or (stones[i] - stones[k]) == j - 1
                        dp[i][j+1] = dp[i][j+1] or (stones[i] - stones[k]) == j + 1
        #print dp[5]
        return any(dp[len(stones)-1])
class Solution(object):
    def canCross(self, stones):
        """
        :type stones: List[int]
        :rtype: bool
        """
        self.memo = set()
        target = stones[-1]
        stones = set(stones)

        res = self.bt(stones, 1, 1, target)
        return res

    def bt(self, stones, cur, speed, target):
        # check memo
        if (cur, speed) in self.memo:
            return False

        if cur==target:
            return True
        
        if cur>target or cur<0 or speed<=0 or cur not in stones:
            return False
        # dfs
        candidate = [speed-1, speed, speed+1]
        for c in candidate:
            if (cur + c) in stones:
                if self.bt(stones, cur+c, c, target):
                    return True

        self.memo.add((cur,speed))
        return False
        

相关文章

  • 8.21 - hard - 78

    403. Frog Jump首先做出来一个TLE的版本,因为这里面要search三种情况,可以用记忆化搜索来做。

  • 8.21 - hard - 74

    358. Rearrange String k Distance Apart 这道题就是把所有值都进行最大区分,在...

  • 8.21 - hard - 79

    407. Trapping Rain Water II 利用外围边界,依次朝里面找,只是新加入heap的值需要取其...

  • 8.21 - hard - 80

    410. Split Array Largest Sum 有两种解法: 按值二分: 左边界是array里的最大值,...

  • 8.21 - hard - 72

    352. Data Stream as Disjoint Intervals 有序的几个重要数据结构和算法:hea...

  • 8.21 - hard - 73

    354. Russian Doll Envelopes 简单的DP的话,会TLE,worst case O(n^2...

  • 8.21 - hard - 75

    363. Max Sum of Rectangle No Larger Than K 如果是求最大值,用for l...

  • 8.21 - hard - 76

    381. Insert Delete GetRandom O(1) - Duplicates allowed 设计...

  • 8.21 - hard - 77

    391. Perfect Rectangle 找出四个边角点。 所有的小矩形面积和等于大矩形面积 除了四个边角点,...

  • 降级备份

    git reset --hard 9b2d32b605630f28625709ebd9d78ab3016b2bf6

网友评论

      本文标题:8.21 - hard - 78

      本文链接:https://www.haomeiwen.com/subject/uydkdxtx.html