笔试题;携程(斐波那契数列变形)

本文探讨了一个经典的算法问题:跨N级台阶,每步可跨1/2/3级,但3级仅限跨一次,通过回溯算法求解所有可能的跨法。深入解析了回溯算法的应用及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 题目

跨 N 级台阶,可以一次跨 1/2/3 级,但只能跨 1 次 3 级,一共有多少种跨法?

2 Java

注意使用 回溯正向递归,而非 动归正向迭代
这道题不知道怎么利用子问题加速
这种时候直接用回溯吧

import java.util.Scanner;

/**
 * @classname XieCheng_Main1
 * @description TODO 跨 N 级台阶,可以一次跨 1/2/3 级,但只能跨 1 次 3 级,一共有多少种跨法;注意使用 回溯正向递归,而非 动归正向迭代
 * @author 张泽阳
 * @date 2020/5/7 10:28
 * @version 1.0
 */
public class XieCheng_Main1 {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        System.out.println(function(N));
    }

    public static int function(int N) {
        helper(N, 0, true);
        return ans;
    }
    static int ans = 0;
    // three为true代表当前走到n级台阶,没有跨过3级台阶,还可以尝试一步跨3级
    public static void helper(int N, int n, boolean three){
        // if 是否记录路径
        if(n >= N){
            if(n == N){
                ans++;
            }
            return;
        }
        // for 多路选择
        if(three){
            helper(N, n + 3, false);
        }
        helper(N, n + 2, three);
        helper(N, n + 1, three);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值