跳跃游戏-问题分析

https://leetcode-cn.com/problems/jump-game/

## 问题描述: ![](https://img2020.cnblogs.com/blog/900860/202106/900860-20210627160955399-1850433585.png)

首先分析这个问题的复杂度在哪个地方:每个出发点有其值种可能,每往前推进一步又有若干可能,直接暴力去推演 当问题规模大的时候 算力堪忧。

这个时候想到找到 通过解决子问题来解决全局问题的子问题 一时间没了思路。

然后想到不如回想下经典的斐波齐契那数组。

乍一看上去 能感觉到这里面会有很多的重复计算,能不能像优化斐波齐契那数组那样,缓存一些结算结果?

并且感觉倒着去推演每个位置能否到达会相对容易些,且计算的结果可以利用:当前能否到达 取决于从终点往前算起,当前可达范围的位置 能否可达终点。

对于终点到终点必然可达是true。

于是就有了f(n)=for(int i=终点下表;i>n;i--){

    if(a[n]>=i-n&&f(i)){

      return true;

    }

如此便从后往前推演出每个位置到终点是否可达

最后取f(0)

 

posted @ 2021-06-27 16:10  l2c  阅读(45)  评论(0编辑  收藏  举报