首页 > 代码库 > jump game

jump game

1。第一次觉得很简单,但是超时了

 1 public class Solution { 2     public boolean canJump(int[] A) { 3          4         int len=A.length; 5         boolean b[]=new boolean[len]; 6         b[0]=true; 7         for(int i=1;i<len&&i<=A[0];i++) b[i]=true; 8          9         for(int j=1;j<len;j++)10         {11             if(b[j])12             {13                 int i;14                 for( i=1;j+i<len&&i<=A[j];i++)15                 {16                     b[j+i]=true;17                 }18                 if(j+i==len) return b[len-1];19                 20                 21             }22             23             24         }25         return b[len-1];26             27         }28         29    30 }
View Code

2.看了别人的思路,很牛,改进上述思想就是其实没必要a[i]后a[i]个数设为1,记住后面最大的范围就行。,

 

 1 public class Solution { 2     public boolean canJump(int[] A) { 3          4          5         int len=A.length; 6         if(len==1&&A[0]==0) return true; 7       int max=A[0]; 8       int i=1; 9         while(i<len-1)10         {11             if(max<=0) return false;12             13             max=Math.max(A[i],max-1);14             i++;15             if(max<=0) return false;16             17             18         }19        20        if(max>=1) return true;21         return false;22         23             24         }25         26    27 }
View Code

3.我后来想还是0的原因导致最后到不了尾巴,0的宽度就是一条沟,前面一直在积蓄力量。就是最大能跳的长度。跳过了积蓄,跳不过失败。

4.参考最简洁的代码http://www.cnblogs.com/remlostime/archive/2012/11/12/2765894.html(没仔细琢磨,把几个情况统一了)

 1 public class Solution { 2     public boolean canJump(int[] A) { 3          4          5         int len=A.length; 6         int max=A[0]; 7         for(int i=1;i<len;i++) 8         { 9             if(max>0)10             {11                 12             max=Math.max(A[i],max-1);13             }14             else return false;15         }16             17             return true;18       19             20         21  22        23         }24         25    26 }