以下代码的时间复杂度是多少?您能给出一些解释吗?

此代码来自LeetCode问题“ Frog Jump”的解决方案:

public class Solution {
    public boolean canCross(int[] stones) {
        int[][] memo = new int[stones.length][stones.length];
        for (int[] row : memo) {
            Arrays.fill(row,-1);
        }
        return can_Cross(stones,memo) == 1;
    }
    public int can_Cross(int[] stones,int ind,int jumpsize,int[][] memo) {
        if (memo[ind][jumpsize] >= 0) {
            return memo[ind][jumpsize];
        }
        for (int i = ind + 1; i < stones.length; i++) {
            int gap = stones[i] - stones[ind];
            if (gap >= jumpsize - 1 && gap <= jumpsize + 1) {
                if (can_Cross(stones,i,gap,memo) == 1) {
                    memo[ind][gap] = 1;
                    return 1;
                }
            }
        }
        memo[ind][jumpsize] = (ind == stones.length - 1) ? 1 : 0;
        return memo[ind][jumpsize];
    }
}

问题的说明:

  

一只青蛙过河。河流分为x个单位,在   每个单元可能存在或可能不存在石头。青蛙可以跳上   石头,但绝对不能跳入水中。

     

给出以升序排列的宝石位置列表(单位)   命令,确定青蛙是否能够通过降落在河上   最后一块石头。最初,青蛙在第一块石头上,并假设   第一跳必须为1个单位。

     

如果青蛙的最后一次跳跃是k个单位,则它的下一次跳跃必须是   k-1,k或k + 1个单位。请注意,青蛙只能跳入   向前的方向。

     

注意:

     

结石数量≥2并且      

[0,1,3,5,6,8,12,17]

     

共有8块石头。第一块石头在第0个单位,第二个   第一单元的石头,第三单元的第三石头,依此类推...   在第十七单位的最后一块石头。

     

返回true。青蛙可以通过跳1个单位跳到最后一块石头   第二块石头,然后是2个单位到第三块石头,然后是2个单位到第四块   石头,然后是3个单位到6号石头,4个单位到7号石头和5个石头   单位到第八石。示例2:

     

[0,2,4,9,11]

     

返回false。没有办法跳到最后一块石头   第5和第6石头之间的距离太大。

asdf564e 回答:以下代码的时间复杂度是多少?您能给出一些解释吗?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3105940.html

大家都在问