n级阶梯,每次走一步或两步,问最多有多少种走法 二叉树实现(面试题)

深度优先搜索(DFS)算法精讲:从递归实现到剪枝优化与工程实践 深度优先搜索是图与树遍历的基础算法,其核心原理是沿着分支尽可能深入地探索,直至末端再回溯,以此遍历所有可能路径。该算法在工程上具有重要价值,是解决路径查找、状态空间搜索等问题的关键技术。通过递归或显式栈实现,DFS广泛应用于文件系统遍历、游戏逻辑、排列组合生成及图论中的连通性分析等场景。在实际应用中,结合剪枝和记忆化搜索等优化技巧,能有效提升算法效率,避免栈溢出等问题。本文以二叉树遍历、图路径查找和全排列问题为例,深入剖析了DFS的递归与迭代实现框架,并探讨了其在回溯算法和性能优化中的关键作用。 阅读详情

NodeTree类


public class NodeTree {
    private int num;
    private NodeTree left;
    private NodeTree right;
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public NodeTree getLeft() {
        return left;
    }
    public void setLeft(NodeTree left) {
        this.left = left;
    }
    public NodeTree getRight() {
        return right;
    }
    public void setRight(NodeTree right) {
        this.right = right;
    }
    public NodeTree() {
        super();
    }
    public NodeTree(int num) {
        super();
        this.num = num;
    }
    public NodeTree(int num, NodeTree left, NodeTree right) {
        super();
        this.num = num;
        this.left = left;
        this.right = right;
    }
    
    

}

主要用迭代实现


public class Lianxi03 {

    private static int num=0;
    public static void main(String[] args) {
        NodeTree nodeTree=new NodeTree(0);
        
        
        method02(nodeTree,100);
        System.out.println(num);
    }
    
    

    public static void method02(NodeTree nodeTree,int num1){
        if(nodeTree.getNum()==num1){
            ++num;
        }else if (nodeTree.getNum()>num1) {
            
        }else if (nodeTree.getNum()<num1){
            int temp=nodeTree.getNum();
        //    System.out.println(temp+"******"+num);
            
            NodeTree tempnode =nodeTree;
            nodeTree.setLeft(new NodeTree());
            nodeTree=nodeTree.getLeft();
            nodeTree.setNum(temp+1);
            method02(nodeTree,num1);
            
            tempnode.setRight(new NodeTree());    
            nodeTree=tempnode.getRight();
            
            nodeTree.setNum(temp+2);
            method02(nodeTree,num1);
        }
    }
}

leetcode题目节选 有n级台阶,一个人每次上一级或者两级,问有多少种走完N级台阶的方法。为了防止溢出,请将结果Mod 1000000007。 给定一个正整数int N,请返回一个数,代表上楼的方式数。保证N小于等于100000。 这道题类似于斐波那契数列,跳上N级台阶的情况,要么是从N-2级台阶直接跨2级台阶,要么是从N-1级台阶跨1级台阶,即转移方程是f(N) = f(N - 1) + f(N - 2),状态方程为f(1) = 1,f(2) = 2。 立即下载

相关推荐

问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。

问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。 实际情况:给定一个矩阵m,从左上角开始每次只能向右走或者向下走,最后达到右下角的位置,路径中所有数字累加起来就是路径和,返回所有路径的最小路径和,如果给定的m如下,那么路径1,3,1,0,6,1,0就是最小路径和,返回12. 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0

n级阶梯,每次走一步或两步,问最多有多少种走法 二叉树实现

NodeTree类 public class NodeTree { private int num; private NodeTree left; private NodeTree right; public int getNum() { return num; } public void setNum(int n...

weixin_30552811的博客 205

ModelSim 2020.4破解失败?手把手教你解决‘Unable to checkout viewer license‘报错(附环境变量配置)

本文针对ModelSim 2020.4启动时遇到的‘Unable to checkout viewer license’报错,提供了从理解许可证机制到分步修复的完整指南。文章深入解析了viewer license与图形用户界面(GUI)的关系,并详细说明了通过生成有效许可证文件、精准配置系统环境变量及替换关键文件来解决图形界面启动失败的问题,帮助用户彻底修复并理解其背后的逻辑。

k6l7m8n9的博客 998

面试题:小明爬楼梯,一次只能上1级或者2级台阶,一共有n级台阶,一共有多少种方法上台阶?python实现

在面试中遇到的一个题,现在记录下来解决办法。 如果有一级台阶,方法只有1种 如果有两级台阶,则有2种方法 当级数为n的时候有以下两种情况: 1、第n级台阶时是在n-1级上1级上来的 2、第n级台阶时是在n-2级上2级上来的 可以使用递归实现。 def upstairs(num): if num==1: return 1 if num==2: retu...

qq_41107910的博客 2万+

抖音视频数据抓取

最近经常有人问我抓取抖音视频的数据,问我一些很小白的问题,算法给他也不会用。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有描述。 搜索个视频看看 查看抓的包信息: 可以看到,这里是post请求...

2501_91048859的博客 3100

数学文化赏析MOOC笔记【2023】

深圳大学UOOC课程《数学文化赏析》课程笔记

simplenthpower的博客 1753

有N步台阶,每次可以走1步或者2步,计算有多少种走法

假如台阶为1 有一种走法 f(1)=1 假如台阶有2 有1+1,2 这两种走法 1步+1步 =2种 f(2)=2 假如台阶有3 有1+1+1 ,1+2 ,2+1 这三种走法 就是f(3)= f(1) + f(2)=1 + 2 = 3 种走法 假如台阶有4 有1+1+1+1 ,1+2+1,1+1+2,2+1+1,2+2 这五种走法 ,就是 f(4)=f(2) + f(3)=2+3=5 种走法 假如台阶有5 有1+1+1+1+1,1+2+2,1+2+1+1,1+1+1..

m0_62962289的博客 4888

# ubuntu 系统使用 yum命令报错 There are no enabled repos.Run “yum repolist all“ to see the repos you have...

# ubuntu 系统使用 yum命令报错 There are no enabled repos.Run "yum repolist all" to see the repos you have.You can enable repos with yum-config-manager --enable

段子手168的博客 6686

n级阶梯,每次走一步或两步,问最多有多少种走法

遇到这道题两次了,现在来总结下。      方法一:运用组合数学的思想。假设在整个过程中,我有k次走了两步,那么剩下的n-2k次我走的都是一步,那么我总的走的步数是k+n-2k。则结果为从n-k里面选了k次走两步,结果为,代码如下: public BigDecimal jiecheng(int n){ if(n==0||n==1){ return new BigDecimal

redstraw的专栏 7670

OpenHands:开源AI智能体开发平台实战指南与架构解析

AI智能体(Agent)作为人工智能领域的关键技术,通过模拟人类的推理与行动循环,能够自主规划并执行复杂任务。其核心原理基于ReAct(Reasoning and Acting)框架,结合规划、工具使用与记忆系统,实现了从感知到决策的闭环。在软件工程领域,AI智能体的技术价值在于将自然语言指令转化为具体的开发操作,从而显著提升代码生成、测试编写和系统维护的效率。典型的应用场景包括自动化代码重构、智能文档生成以及持续集成流程的优化。本文聚焦于OpenHands这一开源AI驱动开发平台,它提供了完整的智能体SD

weixin_27021789的博客 462

图机器学习(1)——图论基础

图 (Graph) 是一种描述实体间关系的数学结构,几乎在各个领域都有应用。例如,社交网络就是图,其中用户之间的连接取决于一个用户是否“关注”另一个用户。图论,即对图的研究,一直以来广受关注,包含了大量算法、性质分析方法和数学模型,以解析复杂系统的行为特征。本节将介绍图数据结构的核心概念,通过理论阐述与实例演示相结合的方式,理解基础理论用以实践应用。重点介绍用于创建、操作和研究复杂网络结构与功能的 Python 库。

盼小辉丶的博客 9217

算法 卡特兰Catalan数

介绍Catalan数是组合数学中一个常在各种计数问题中出现的数列。一般项公式为 Cn的另一个表达形式为一般来说,我们编程时使用递推关系会更方便计算或即:C(n) = C(1)*C(n-1) + C(2)*C(n-2) + … + C(n-1)C(1).它的前几项为: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796。可以先通过前几项判断问题是否属于卡特兰

Heqianqian的博客 1082

运行openclaw gateway install时出现Gateway install failed: Error: schtasks create failed的解决方案

本文主要介绍了运行openclaw gateway install时出现Gateway install failed: Error: schtasks create failed的解决方案,希望能对学习和使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

卡特兰数 java,Catalan数(卡特兰数)

由于Catalan数经常会在算法题或面试题中出现,在这里做一下小小的总结。介绍Catalan数是组合数学中一个常在各种计数问题中出现的数列。一般项公式为 Cn的另一个表达形式为 一般来讲,我们编程时用递推关系会更方便计算: 或 即:C(n) = C(1)*C(n-1) + C(2)*C(n-2) + … + C(n-1)C(1).它的前几项为: 1, 1, 2, 5, 14, 42, 132, 4...

weixin_34580002的博客 499

通用抓取————6D位姿估计

这意味着算法在没有物体的先验知识(如 CAD 模型)的情况下,依然能够通过神经网络捕捉物体的外观、形状和几何特征,生成相关的 6D 位姿估计。通过输入物体类别的描述,算法能够推断出该类别物体的位姿和尺度,无需特定物体的 CAD 模型。在这个坐标空间中,物体的位姿和尺度都是已知的,基于这个标准化表示,算法可以对输入图像中的物体进行 6D 位姿和尺寸的估计。○优势: ICP 是一种非常有效的位姿优化算法,特别适合精细调整物体的位姿,确保最终估计的位姿与真实物体的点云或模型高度一致。

具身机器人和通用AI 2385

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

刷穿LeetCode面试题:精选Topic分类库让算法训练效率提升300%

你是否还在盲目刷题却收效甚微?面对2000+道LeetCode题目不知从何下手?本文将带你系统掌握一个由资深开发者精心筛选的算法训练框架,通过Topic分类体系和科学训练方法,让你的技术面试准备效率提升3倍。读完本文你将获得: ✅ 10大核心算法领域的精准训练路径 ✅ 区分"价值题"与"垃圾题"的筛选指南 ✅ 从Easy到Hard的阶梯式训练模板 ✅ 高频面试题的最优解题思路框架 ...

gitblog_00057的博客 471

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Catalan数

图片来自:https://en.wikipedia.org/wiki/Catalan_number公式递推公式f(n)=f(0)*f(n-1)+f(1)*f(n-2)+…+f(n-1)*f(0) 第一项f(0)*f(n-1)-> (………) 第二项f(1)*f(n-2)-> ..(…….) 第三项f(2)*f(n-3)-> ….(…..) 也就是每次把串分成两部分,其中第二部分是被一个

harryhare的专栏 1650

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【近五千字纯手撸】✨前后一个月面试30家中大型高级、资深java工程师终获500强公司offer心得以及经过

????????一个毕业两年的双非本科的小小程序员的冲击历程,拿到了500强的offer。 链接:https://blog.youkuaiyun.com/asd1358355022/article/details/119707811 前提背景 ????????当前公司岗位已不足以满足我个人未来规划以及当前的工作已经不满足我的能力提升,故开始找下一份工作。我从7月中旬开始,每天下班开始高强度备战,7月下旬开始窥探当前行情,投递简历。前前后后陆陆续续接到了30来家中大型公司的面试邀约。 ????????面试范围很广泛

龙飞的博客 6628

动态规划快速入门

更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。 动态规划算法一直是面试手撕算法中比较有挑战的一种类型。很多的分配问题或者调度问题实际上都可能用动态规划进行解决。(当然,如果问题的规模较大,有时候会抽象模型使用动归来解决,有时候则可以通过不断迭代的概率算法解决...

chuoxujia4799的博客 173

算法要怎么学习

学习算法,切记不要一上来就开始啃《算法导论》,毕竟这本书并不适合新手学习,如果你之前的算法基础比较薄弱,只会一直陷在“拿起来又放下”的循环里。 可以怎么入门呢?建议还是看书+实战,实战当然也不是说要去肝ACM或者是topcoder什么的,基本上来我们LintCode刷刷题也就够了。 如何学习算法? 算法,其实可以分为三种。算法、面试算法、竞赛算法。 算法 也就是算法本身,推荐一些书籍。 1.入门系列: 《算法图解》:“像小说一样有趣的算法入门书”,主打“图解”,通俗易懂 《大话数据结构》:把理论讲得有趣不枯

weixin_45734343的博客 1050

Java面试核心:JVM、并发与Spring深度解析

Java技术面试中,JVM内存模型、并发编程和Spring框架是三大核心考察领域。JVM的内存管理机制涉及垃圾回收算法、内存分配策略及优化技巧,如TLAB机制和逃逸分析,这些原理直接影响应用性能。并发编程中,锁优化、CAS操作和线程安全集合(如ConcurrentHashMap)的设计思想是关键,理解AQS和ThreadLocal等组件能有效提升代码质量。Spring框架的IoC容器和AOP实现,尤其是循环依赖处理和动态代理选择,体现了其设计哲学。掌握这些技术不仅能应对面试,更能提升工程实践能力,适用于高并

weixin_33563728的博客 253

大学生毕业之前,Java后端到底需要学哪些技术?

根据我这几年的java工作经验来看,弱基础的人想要学好java,基础尤为重要。无论之后是做开发还是大数据,都必须了解底层原理,把多线程,线程池这些吃透了。 你目前最需要的是了解自己处于哪个阶段,然后去招聘网站上看看心意公司的岗位JD,明确这些信息后鼓起勇气继续学,免得毕业后回炉重造。 阶段一:明确自身定位 这是百度在招的java应届生岗位JD,其实可以很大程度上代表不少企业的用人标准。 他们的要求简单明了 算法与数据结构 Java基础(八股文) 数据库 架构方面经验 阶段二:制定目标,进行系统性学习

九章算法的博客 666

leetcode-二分查找-C

用C语言实现

Novelin的博客 652

力扣刷题方法论:从算法模板到面试实战

算法能力是软件工程师的核心竞争力之一,而系统化的刷题训练是提升算法思维的有效途径。通过分析高频面试题库可以发现,80%的算法考察点集中在20%的知识域,如动态规划、DFS/BFS等经典算法。掌握代码模板库构建、复杂度分析和常见陷阱规避等工程实践技巧,能显著提升解题效率。以二叉树问题为例,建立结构特征提取、经典题目矩阵和解法进化路线的系统方法论,可深度掌握一类题型。在面试场景中,采用3C沟通原则和模块化编码规范,配合完整的测试用例设计,能大幅提高代码通过率。这些方法不仅适用于力扣刷题,更是培养工程化思维的重要

weixin_33744854的博客 516
上一篇: spring boot中servlet启动原理
下一篇: java 实现基于opencv全景图合成
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值