Leetcode55-跳跃游戏
代码1:(错误版)
class Solution:
def canJump(self, nums: List[int]) -> bool:
cur, left, right = 0, 0, 0
tmp = 0
while right < len(nums):
left = right + 1
right = cur + nums[cur]
if right >= len(nums) - 1:
return True
for i in range(left, right + 1):
if i + nums[i] > tmp:
tmp = i + nums[i]
cur = i
return False
错误原因:
此时left>right, 程序没有退出while循环。
修改为:
class Solution:
def canJump(self, nums: List[int]) -> bool:
cur, left, right = 0, 0, 0
tmp = 0
while right < len(nums):
left = right + 1
right = cur + nums[cur]
if left > right:
return False
if right >= len(nums) - 1:
return True
for i in range(left, right + 1):
if i + nums[i] > tmp:
tmp = i + nums[i]
cur = i
return False
报错:
修改循环条件为:while left < len(nums):
class Solution:
def canJump(self, nums: List[int]) -> bool:
cur, left, right = 0, 0, 0
tmp = 0
while left < len(nums):
left = right + 1
right = cur + nums[cur]
if left > right:
return False
if right >= len(nums) - 1:
return True
for i in range(left, right + 1):
if i + nums[i] > tmp:
tmp = i + nums[i]
cur = i
return False
当输入为[0]时,left = 1, 超出了列表范围。