青蛙从位置0出发,数组 nums[i] 表示在位置 i 最多可跳 nums[i] 步,求到达末位的 最少跳跃次数。
答案:
cpp
int testJump2(vector<int>& nums) { // 最小跳跃次数。青蛙从位置0出发,数组 nums[i] 表示在位置 i 最多可跳 nums[i] 步,求到达末位的 最少跳跃次数。
vector<int> vec(nums.size(), 0); // vec[i]表示到达i位置的最少跳跃次数
for (int i = 1; i < nums.size(); i++) {
bool init = false;
for (int j = 0; j < i; j++) {
if (j + nums[j] >= i) {
// 即从j索引处能1步就跳到i索引处
if (!init) {
vec[i] = vec[j] + 1;
init = true;
}
else if (vec[j] + 1 < vec[i]) {
vec[i] = vec[j] + 1;
}
}
}
}
return vec.back();
}
测试:
cpp
int main() {
vector<int> vec{ 2, 3, 1, 1, 4 };
std::cout << std::format("testJump2, res: {0}", testJump2(vec)) << std::endl;
}
运行:

ok.