leetcode-55. 跳跃游戏

题目

55. 跳跃游戏

解法

最终目标是求最大跳跃距离,如果最后发现可以跳到比最后一格要多,那么也就可以跳到最后一格

  1. 可以按照两种思想理解
    1. 贪心,每次求最大的跳跃距离
    2. dp 公式: \(f_n=\left \{ \begin{array}{lr} max(f_{n-1}, nums[n] + n), & n > 1 \\ n, & n=1 \end{array} \right.\)
class Solution {
    
    /**
     * @param Integer[] $nums
     * @return Boolean
     */
    function canJump($nums) {
        if (empty($nums)) {
            return true;
        }
        
        if (count($nums) == 1) {
            return true;
        }
        
        $max = $nums[0];
        for ($i = 1; $i < count($nums) - 1; $i++) {
            if ($i > $max) {
                return false;
            }
            
            $max = max($i + $nums[$i], $max);
        }
        
        return $max >= count($nums) - 1;
    }
}

参考

官方题解
跳跃游戏 动态规划 简单易懂 Python

posted @ 2022-01-08 17:05  吴丹阳-V  阅读(31)  评论(0编辑  收藏  举报