/**
* @param {number[]} nums
* @return {boolean}
*/
var canJump = function (nums) {
let max = 0; // 能够走到的数组下标
for (let i = 0; i < nums.length; i++) {
if (max < i) return false; // 当前这一步都走不到,后面更走不到了
max = Math.max(nums[i] + i, max);
}
return max >= nums.length - 1;
};
C++ Code:
class Solution {
public:
bool canJump(vector<int>& nums) {
int n=nums.size();
int k=0;
for(int i=0;i<n;i++)
{
if(i>k){
return false;
}
// 能跳到最后一个位置
if(k>=n-1){
return true;
}
// 从当前位置能跳的最远的位置
k = max(k, i+nums[i]);
}
return k >= n-1;
}
};
Java Code:
class Solution {
public boolean canJump(int[] nums) {
int n=nums.length;
int k=0;
for(int i=0;i<n;i++)
{
if(i>k){
return false;
}
// 能跳到最后一个位置
if(k>=n-1){
return true;
}
// 从当前位置能跳的最远的位置
k = Math.max(k, i+nums[i]);
}
return k >= n-1;
}
}
Python3 Code:
class Solution:
def canJump(self, nums: List[int]) -> bool:
"""思路同上"""
_max = 0
_len = len(nums)
for i in range(_len-1):
if _max < i:
return False
_max = max(_max, nums[i] + i)
# 下面这个判断可有可无,但提交的时候数据会好看点
if _max >= _len - 1:
return True
return _max >= _len - 1