详细见:leetcode.com/problems/jump-game
Java Solution: github
package leetcode;
public class P055_JumpGame {
public static void main(String[] args) {
System.out.println(new Solution1().canJump(new int[]{2,3,1,1,4}));
System.out.println(new Solution1().canJump(new int[]{3,2,1,0,4}));
}
/*
* 4 ms
* 3.78%
*/
static class Solution1 {
public boolean canJump(int[] nums) {
if (nums == null || nums.length == 0)
return true;
int max = nums[0], i = 1;
while (true) {
if (max >= nums.length - 1)
return true;
if (max < i)
return false;
if (i == nums.length)
break;
max = Math.max(max, nums[i] + i);
i ++;
}
return false;
}
}
}
C Solution: github
/*
url: leetcode.com/problems/jump-game/
AC 6ms 31.34%
*/
#include <stdio.h>
#include <stdlib.h>
#define bool int
int _max(int a, int b) {
return a < b ? b : a;
}
bool canJump(int* n, int nn) {
int mti = 0, i = 0;
for (i = 0; i < nn; i ++) {
if (mti < i) return 0;
mti = _max(mti, n[i] + i);
if (mti > nn-1) return 1;
}
return 1;
}
int main() {
int n[] = {3,2,1,0,4};
int nn = 5;
printf("answer is %d\r\n", canJump(n, nn));
}
Python Solution: github
#coding=utf-8
'''
url: leetcode.com/problems/jump-game
@author: zxwtry
@email: zxwtry@qq.com
@date: 2017年4月11日
@details: Solution: 45ms 46.70%
'''
class Solution(object):
def canJump(self, n):
"""
:type n: List[int]
:rtype: bool
"""
nn = 0 if n == None else len(n)
mti = 0
for i in range(nn):
if i > mti: return False
mti = max(mti, i+n[i])
return True
if __name__ == "__main__":
n = [2,3,1,1,4]
n = [3,2,1,0,4]
print(Solution().canJump(n))