public class JumpGames { //方法一:暴力,遇到0的时候就去判断一下前面的数是否可以跳过这个0,如果最后一个数是0,判断是否可以刚好到达或者跳跃该数 public boolean canJump1(int[] nums) { if(nums[0]==0&&nums.length!=1) return false; for (int i = 1; i <nums.length ; i++) { if(nums[i]==0){ //写一个方法判断这个0是否可以跳跃过去 boolean fl = flag(nums,i); if(fl){ continue; }else { return false; } } } return true; } public boolean flag(int[] nums,int m){ for (int i = 0; i <m; i++) { if(i+nums[i]>m){ return true; }else if(m==nums.length-1&&i+nums[i]>=m){ return true; } } return false; } //方法二:贪心策略 public boolean canJump(int[] nums) { //定义一个变量,保存当前最远能跳到的位置 int farthest = 0; //遍历数组,更新farthest for (int i = 0; i <nums.length ; i++) { //判断当前i在可到达的范围内,更新farthest if(i<=farthest){ farthest = Math.max(farthest,i+nums[i]); if(farthest>=nums.length-1){ return true; } } else{ //如果i已经到不了 return false; } } return false; } public static void main(String[] args) { int[] nums = {3,2,1,0,4}; JumpGames jumpGames = new JumpGames(); System.out.println(jumpGames.canJump(nums)); } }