Jump Game
题目描述
跳跃游戏
给定一个非负整数,最初位于整数的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。
请判断能否到达最后一个位置。
示例:
输入:[2, 3, 1, 1, 4]
输出:true
解法
解法一:DFS
从最后一个位置开始倒推。
时间复杂度:
O(N)
空间复杂度:
O(N)
func canJump(nums []int) bool {
visited := make([]bool, len(nums))
return helper(nums, 1, visited)
}
func helper(nums []int, end int, visited []bool) bool {
if end == len(nums) {
return true
}
distance := 0
for i := len(nums) - 1 - end; i >= 0; i-- {
distance++
if visited[i] {
continue
}
if distance > nums[i] {
continue
}
if helper(nums, distance+end, visited) {
return true
}
visited[i] = true
}
return false
}
解法二:贪心
时间复杂度:
O(N)
空间复杂度:
O(1)
func canJump(nums []int) bool {
remote := 0
for i := 0; i <= remote; i++ {
if remote < nums[i] + i {
remote = nums[i] + i
}
if remote >= len(nums) - 1 {
return true
}
}
return false
}
Last updated
Was this helpful?