题目
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
思路
模拟法,想象你是一个横版游戏里的小人,每个格子上有“步数点数”,如果拿了“步数点数”,则之前积攒的步数就会重置。
Math.max(maxPos, i + steps)的含义:
每走一个格子,你要思考此时这个格子上的步数点数值不值得拿,如果步数点数比你之前积攒的步数点数大,就拿,否则无视,继续走
class Solution {public boolean canJump(int[] nums) {int maxPos = 0; // 能跳的最远的坐标for (int i = 0; i < nums.length - 1; i++) { // i是当前所在位置int steps = nums[i]; // 当前能跳的次数;maxPos = Math.max(maxPos, i + steps); // 目前能走到的最远位置if (maxPos <= i) { // 目前能走的最远位置到不了终点return false;}}return true;}}
