LeetCode刷题实战403: 青蛙过河
程序IT圈
共 2337字,需浏览 5分钟
·
2021-10-08 18:05
示例
示例 1:
输入:stones = [0,1,3,5,6,8,12,17]
输出:true
解释:青蛙可以成功过河,按照如下方案跳跃:跳 1 个单位到第 2 块石子, 然后跳 2 个单位到第 3 块石子, 接着 跳 2 个单位到第 4 块石子, 然后跳 3 个单位到第 6 块石子, 跳 4 个单位到第 7 块石子, 最后,跳 5 个单位到第 8 个石子(即最后一块石子)。
示例 2:
输入:stones = [0,1,2,3,4,8,9,11]
输出:false
解释:这是因为第 5 和第 6 个石子之间的间距太大,没有可选的方案供青蛙跳跃过去。
解题
class Solution {
public:
bool canCross(vector<int>& stones) {
int n=stones.size();
vector<vector<bool>>dp(n,vector<bool>(n+1,false));
dp[0][1]=true;
for(int i=1;ibool flag=false;
//因为要到达i,与石头j的距离,必须要小于i,不然不可能跳到i处
for(int j=i-1;j>=0;j--){
int diff=stones[i]-stones[j];
if(diff>i){
break;
}
if(dp[j][diff]){
dp[i][diff-1]=true;
dp[i][diff]=true;
dp[i][diff+1]=true;
flag=true;
}
}
if(i==n-1&&flag){
return true;
}
}
return false;
}
};
评论