荣耀笔试求解答,可以后退一次的爬楼梯问题
匿名用户
2543
2022.04.11
2022.04.11
发布于 未知归属地

题目描述

青蛙可以一次跳1阶或是2阶楼梯,中途可以后退一次(仅可以后退一次),也可以不后退,问一共有几种方法达到第n阶
示例
n = 1
ans = 1
下面是一个记忆化搜索版本的代码

// 记忆化搜索
public class Main {
    static int[][] cache;
    static int n = 10;
    public static void main(String[] args) {
        cache = new int[n + 1][2];
        System.out.println(dfs(n, 0));
    }
    // dfs,返回从0到pos的方案数目
    public static int dfs(int pos, int backed) {
        if (pos == 0) return 1;
        if (cache[pos][backed] > 0) return cache[pos][backed];
        int sum = 0;
        sum += dfs(pos - 1, backed);
        if (pos - 2 >= 0) {
            sum += dfs(pos - 2, backed);
        }
        if (backed == 0 && pos + 1 <= n) {
            sum += dfs(pos + 1, 1);
        }
        cache[pos][backed] = sum;
        return sum;
    }
}
评论 (3)