题目链接:https://leetcode-cn.com/problems/jump-game/
题目描述
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
第一次编辑代码:
class Solution {
public boolean canJump(int[] nums) {
int n = nums.length;
return toLast(0, n-1, nums);
}
public boolean toLast(int cur, int tar, int[] nums){
if(cur > tar)
return false;
if(cur == tar)
return true;
int i = 1;
while(i <= nums[cur]){
if(toLast(cur+i, tar, nums))
return true;
}
return false;
}
}
提交结果
超出时间限制。
反思
递归不行,那就换种思路,倒着找最小路径。
第二次编辑代码:
class Solution {
public boolean canJump(int[] nums) {
int n = nums.length;
int dist = 1;
boolean flag = true;
for(int i = n - 2; i >= 0; i--){
if(nums[i] >= dist){
flag = true;
dist = 1;
}else{
flag = false;
dist++;
}
}
return flag;
}
}
反思
继续简化代码。
第三次编辑代码:
class Solution {
public boolean canJump(int[] nums) {
int n = nums.length;
int dist = 1;
for(int i = n - 2; i >= 0; i--){
dist = nums[i] >= dist ? 1 : ++dist;
}
return dist == 1;
}
}