https://leetcode.cn/problems/jump-game/description/?envType=study-plan-v2&envId=top-interview-150

go

复制代码
package leetcode150

import "testing"

func TestCanJump(t *testing.T) {
    nums := []int{2, 3, 1, 1, 4}
    res := canJump(nums)
    println(res)
}

func canJump(nums []int) bool {
    ff := make([]int, len(nums))
    return jump(nums, ff, 0)
}

func jump(nums []int, ff []int, pos int) bool {
    if ff[pos] == 2 {
        return false
    } else if ff[pos] == 1 {
        return true
    }

    if pos+nums[pos] >= len(nums)-1 {
        ff[pos] = 1
        return true
    }

    for i := nums[pos]; i > 0; i-- {
        if jump(nums, ff, pos+i) {
            return true
        }
    }
    ff[pos] = 2

    return false
}
复制代码