题目描述:
解题方法:动态规划
动态规划解题步骤:
确定状态:
这需要满足两个条件:
状态:设f[j]能不能跳到石头j
转移方程:
初始条件和边界情况:
初始条件:f[0] = True,因为一开始就在0位置
计算顺序:
计算:f[1],f[2],...,f[n-1]
时间复杂度:O(n2),空间复杂度(数组大小):O(n)
代码:
public boolean canJump(int[] nums) { int n = nums.length; boolean[] f = new boolean[n]; f[0] = true; for(int j = 1; j < n; j++){ f[j] = false; for(int i = 0; i < j; i++){ if(f[i] && i + nums[i] >= j){ f[j] = true; break; } } } return f[n-1]; }