思路
LeetCode--跳跃游戏II(动态规划 贪心算法 回溯法)_haikuotiankongdong的博客-CSDN博客
方法一:动态规划
![]()
class Solution {
public:
int jump(vector<int>& nums) {
int dp[nums.size()];
dp[0] = 0;//到达下标0的最小跳数是0
for (int i = 1; i < nums.size(); i++) {
dp[i] = 100000;
for (int j = 0; j < i; j++) {
if (i - j <= nums[j]) {
dp[i] = min(dp[i], dp[j] + 1);
}
}
}
return dp[nums.size() - 1];
}
};
解法二:贪心算法
贪心算法实质上就是在动态规划的基础上减去一些不可能存在的情况
类似回溯算法的剪枝过程
class Solution {
public:
int jump(vector<int>& nums) {
if ( nums.size() == 0) {
return -1;
}
int reach = 0;//当前所能到达的最远坐标
int last = 0;//上一跳可达最远坐标
int count = 0;//跳跃次数
for (int i = 0; i < nums.size(); i++) {
if (i > reach) {
return -1;
}
if (i > last) {
count++;
last = reach;
}
if (i + nums[i] > reach) {
reach = i + nums[i];
}
}
return count;
}
};
题目:

本文介绍了如何使用动态规划和贪心算法解决LeetCode的跳跃游戏II问题。动态规划方法全面考虑所有可能状态,而贪心算法通过剪枝优化,避免不必要的计算,实现高效求解。

512

被折叠的 条评论
为什么被折叠?



