给定一组非负整数,初始时处于数组的第一位下标 0 的位置,数组的每个元素代表那个位置可以跳跃的最大长度。判断你是否能够到达数组的最后一位下标。
e.g.
A = [2, 3, 1, 1, 4],返回 true。
A = [3, 2, 1, 0, 4],返回 false。
我的想法是递归
1 bool canJump(vector<int>& nums) { 2 return jump(nums, 0); 3 } 4 5 bool jump(vector<int> &nums, int m) { 6 if (m + nums[m] >= nums.size() - 1) return true; 7 if (m == nums.size() - 1) return true; 8 for (int i = nums[m]; i >= 1; i--) { 9 if (jump(nums, m + i)) 10 return true; 11 } 12 return false; 13 }
经部分测试用例检验,算法应该是正确的。
但当数据量很大时会超时,如果不能到达,更是会超时。
时间: 2024-10-08 19:08:22