class Solution {
public:void dfs(vector<int>& nums, int i, int layer, int &min){int len = nums.size();if(i == len - 1){ //跳到最后一位了 if(layer < min)min = layer; //记录最小值return; //结束递归}for(int j = 1; j <= nums[i]; j++) //选取不同的跳跃值if(i + j < len) //如果跳跃值在范围内就继续递归dfs(nums, i + j, layer + 1, min);} int jump(vector<int>& nums) {int min = nums.size();dfs(nums, 0, 0, min);return min;}
};
解2:延伸扩展
class Solution {
public:int jump(vector<int>& nums) {int len = nums.size();int min = 0;int i = 0;while (i < len - 1) { //抵达最后一格之前if (i + nums[i] >= len - 1) { //最后一跳min++;break;}int max = i + 1; //延伸的最大范围的下标for (int j = 2; j <= nums[i]; j++) //找到能延伸的最大范围if (i + j < len && i + j + nums[i + j] > max + nums[max])max = i + j;i = max; //更新基点(跳跃一次)min++; //标记延伸一次}return min;}
};