Leetcode.403青蛙过河
题目难度:困难
题目:原题链接
思路:
1、青蛙能否成功到达最后一块石头,与当前的位置和前一步的距离有关,只要跳的步数在[lastDis-1,lastDis+1]内到达下一块石头;
2、官方代码
class Solution {
//存放状态(当前位置和前一个跳跃距离)
private Boolean[][] rec;
public Boolean canCross(int[] stones) {
int n = stones.length;
rec = new Boolean[n][n];
return dfs(stones,0,0);
}
//深度搜索
private boolean dfs(int[] stones,int i,int lastDis)
{
//当前位置在最后一块石头,成功
if(i == stones.length-1)
{
return true;
}
if(rec[i][lastDis] != null)
{
return rec[i][lastDis];
}
for(int curDis = lastDis-1;curDis<=lastDis+1;curDis++)
{
if(curDis>0)
{
int j = Arrays.binarySearch(stones,i+1,stones.length,curDis+stones[i]);
if(j>=0 && dfs(stones,j,curDis))
{
return rec[i][lastDis] = true;
}
}
}
return rec[i][lastDis] = false;
}
}