当前位置: 首页 > news >正文

算法小练习

 不死的兔


 

 解法一:直接用循环的思想来解答

public class Test3 {
        public  static void main(String[] args){

               // 解法1
                int[] arr=new int[12];
                arr[0]=1;
                arr[1]=1;
                //第一个月加第二个月等于第三个月的数量
                for (int i = 2; i < arr.length; i++) {
                        arr[i]=arr[i-1]+arr[i-2];
                }
                System.out.println(arr[11]);

                //解法2
                System.out.println(getRabbit(12));
        }

解法二:

用递归的思想

递归的两大核心:找到递归出口

                             找到递归的规律

public class Test3 {
        public  static void main(String[] args){

                //解法2
                System.out.println(getRabbit(12));
        }

        private static int getRabbit(int i) {
                if (i==0||i==1){
                        return 1;
                }
                return getRabbit(i-1)+getRabbit(i-2);
        }

}

吃猴的桃

我们还是用递归的方法来完成

首先找到递归的出口:第十天的时候

第十天:只剩1个

第九天:剩上一天加一个×2

第八天:第九天加一×2

........

public class Test3 {
        public  static void main(String[] args){
                System.out.println(getMos(1));

        }

        private static int getMos(int i) {

                if(i<=0||i>=11){
                        return -1;
                }
                //递归出口
                if (i==10){
                        return 1;
                }else {
                        return (getMos(i+1)+1)*2;
                }
        }

}

爬楼的明:

从第一层往上面计算非常麻烦,我们可以从第19层开始看

当 n = 1 时,只有一种方法,即一次爬 1 阶,所以 f(1) = 1。
当 n = 2 时,有两种方法:一次爬 2 阶;分两次,每次爬 1 阶,所以 f(2) = 2。
当 n > 2 时,到达第 n 阶楼梯的最后一步可能是从第 n - 1 阶爬 1 阶上来的,也可能是从第 n - 2 阶爬 2 阶上来的。所以爬到第 n 阶楼梯的方法数等于爬到第 n - 1 阶楼梯的方法数加上爬到第 n - 2 阶楼梯的方法数,即 f(n) = f(n - 1) + f(n - 2)。 

public class ClimbingStairs {
    public static int climbStairs(int n) {
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        int first = 1;
        int second = 2;
        int third = 0;
        for (int i = 3; i <= n; i++) {
            third = first + second;
            first = second;
            second = third;
        }
        return third;
    }

    public static void main(String[] args) {
        int n = 5;
        int result = climbStairs(n);
        System.out.println("爬到第 " + n + " 阶楼梯的不同方法数为: " + result);
    }
}

http://www.dtcms.com/a/121834.html

相关文章:

  • git仓库设置访问公钥
  • [leetcode]求最大公约数和最小公倍数(gcd和lcm算法)
  • 【场景应用2】speech_recognition: 微调语音模型
  • 深度学习、图像算法学习记录
  • 【Proteus仿真】【32单片机-A009】矩阵按键系统设计
  • 代码随想录-动态规划24
  • 【Windows】Win2008服务器SQL服务监控重启脚本
  • golang gmp模型分析
  • 【Game】Powerful——Martial Arts Challenge(6)
  • 数据库实践题目:在线书店管理系统
  • 高性能服务开发利器:redis+lua
  • Spring 框架的核心基础:IoC 和 AOP
  • 【算法竞赛】回文字符串+思维模拟(蓝桥杯真题·回文字符串·代码清晰易懂)
  • 巧记英语四级单词 Unit3-上【晓艳老师版】
  • 【SpringCloud】从入门到精通(下)
  • TCP 与 UDP
  • Qt 开发时可以在函数内引用的头文件
  • 国网B接口协议调阅实时视频接口流程详解以及检索失败原因(电网B接口)
  • 蓝桥杯刷题总结 + 应赛技巧
  • MySQL表的增删查改(基础)
  • python学智能算法(九)|决策树深入理解
  • [前端]从人体结构看网页三要素:HTML、CSS 与 JavaScript
  • C#.NET模拟用户点击按钮button1.PerformClick自动化测试
  • 动手人形机器人(RL)
  • 去除Mysql表中的空格、回车、换行符和特殊字符
  • 淘宝API与小程序深度联动:商品详情页“一键转卖”功能开发
  • NO.83十六届蓝桥杯备战|动态规划-基础线性DP|台阶问题|最大子段和|传球游戏|乌龟棋(C++)
  • Elasticsearch 集群搭建
  • Vue3+Vite+TypeScript+Element Plus开发-10.多用户动态加载菜单
  • Hi Robot——大脑加强版的π0:基于「VLM的高层次推理+ VLA低层次任务执行」的复杂指令跟随及交互式反馈