leetcode-55

302 阅读1分钟

题目描述:具体描述见原题,简单来说就是按照一定规则跳房子,看能不能跳到数组最后一个元素,数组中每个值为单次可跳最大步数,每一步可前进一个下标。

解题思路:关键点是能不能跳过数组中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
}

补充说明:突然意识到这个题目有点类似贪心,下午复习一下贪心。小魔王赢了单打,俩人今年都是二十岁,未来五年女子乒乓球第一人竞争感觉开始了。