原题:点击打开链接
给定非负数组成的数组,数组元素代表该点可以向后移动几个单位。判断是否可以移动到数组末尾。
思考过程&解题思路:
这道题不像Jump GameII那样返回走的步数,简单很多。我是用一个reach表示当前可以走到最远的距离。如果reach可以到数组末尾,返回true;如果遍历数组遍历到reach恰巧reach位置的元素为0,返回false。每次遍历完数组更新reach。
结果代码:
public boolean canJump(int[] nums) {
int reach = 0,len = nums.length;//当前最远能到达的位置
if (len == 1)return true;
for (int i = 0;i <= reach;i++){
if (i == reach && nums[reach] == 0) return false;//不能向后移动的情况
reach = Math.max(i + nums[i],reach);//更新reach
if (reach >= len - 1) return true;//能到数组末尾了
}
return true;//nums为空
}