题目描述:具体描述见原题,简单来说就是按照一定规则跳房子,看能不能跳到数组最后一个元素,数组中每个值为单次可跳最大步数,每一步可前进一个下标。
解题思路:关键点是能不能跳过数组中0值位置,如果i下标为0,那么就遍历i之前的元素,如果i - j > num[j],那就意味着可以跳过,具体过程见代码。
具体代码:
func canJump(nums []int) bool {
for i := len(nums)-2; i >= 0; i-- { // 从倒数第二个元素开始向前遍历
if nums[i] != 0 {
continue
}
j := i - 1 // 如果num[i] == 0
for j >= 0 { // 遍历i之前所有元素
if i - j < nums[j] { //如果能跳过当前0元素,结束循环,同时调整下次主循环位置
i = j
break
}
j--
}
if j < 0 { // 如果完成遍历,不能跳过当前0元素,那么就不能跳到最后的元素位置
return false
}
}
return true
}
补充说明:突然意识到这个题目有点类似贪心,下午复习一下贪心。小魔王赢了单打,俩人今年都是二十岁,未来五年女子乒乓球第一人竞争感觉开始了。