您的位置:首页 > 其它

leetcode-55 Jump Game

2017-03-30 15:17 477 查看
这道题本来准备用递归加回溯的方法做,也就是每次都移动最大,看看能到哪里,如果走不通,再退回一步。这样的做法,通过了72个案例,最后一个案例超时,无法通过。于是思考了贪心的方法,判断每个地方可以到达的最远距离。将两次过程记录下来

第一次,

class Solution {
public:
bool canJump(vector<int>& nums)
{
if (nums.empty())
return false;
return isfinalpos(nums,0);

}

//当前位置为i可以跳到的地方
bool isfinalpos(vector<int> &nums, int i)
{
//出口
if (i >= nums.size() - 1)
return true;

//递归
for (int k = nums[i]; k >= 1; k--)
{
int pos = i + k;
if (isfinalpos(nums, pos))
{
return true;

}
}

return false;

}
};
上述方法太费时。
第二次 贪心的方法

class Solution {
public:
bool canJump(vector<int>& nums)
{
int dis=0;
int i = 0;
//i<=dis很重要,决定i是否在可以运动的范围内运动
for (; i < nums.size()&i<=dis; i++)
dis = max(dis, i + nums[i]);

if (i == nums.size())
return true;
else return false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: