跳躍遊戲
給出一個非負整數數組,你最初定位在數組的第一個位置。
數組中的每個元素代表你在那個位置可以跳躍的最大長度。
判斷你是否能到達數組的最後一個位置。
注意事項
這個問題有兩個方法,一個是貪心
和 動態規劃
。
貪心
方法時間複雜度爲O(N)
。
動態規劃
方法的時間複雜度爲爲O(n^2)
。
我們手動設置小型數據集,使大家闊以通過測試的兩種方式。這僅僅是爲了讓大家學會如何使用動態規劃的方式解決此問題。如果您用動態規劃的方式完成它,你可以嘗試貪心法,以使其再次通過一次。
A = [2,3,1,1,4],返回 true.
A = [3,2,1,0,4],返回 false.
class Solution {
public:
/**
* @param A: A list of integers
* @return: The boolean answer
*/
bool func(vector<int> A, int i, int size)
{
if (i >= size - 1)
return true;
int t = A[i];
while (t > 0)
{
if (func(A, t + i, size))
return true;
t--;
}
return false;
}
bool canJump(vector<int> A) {
// write you code here
int size = A.size();
int i = 0;
return func(A, i, size);
}
};