Leetcode.403青蛙过河--每日一题

这篇博客探讨了LeetCode中的一道难题——青蛙过河。通过深度优先搜索(DFS)策略,解决青蛙如何在给定石头位置的情况下成功跳跃到最后一块石头的问题。关键在于判断每一步跳跃是否合法,并使用记忆化搜索优化算法效率。博客详细解释了算法思路并提供了官方代码实现。
摘要由CSDN通过智能技术生成

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值