跳台阶

来源:互联网 发布:js代码整理 编辑:程序博客网 时间:2024/06/14 20:29

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

提示:本题实质是斐波拉契数列问题,关于斐波拉契数列问题的解法,参考我的另一篇博客:斐波拉契数列

类似问题:变态跳台阶

/** * 解法二:递归思想——递归解法 * * 对于本题,前提只有1阶或者2阶的跳法。 *      a. 如果两种跳法,1阶或者2阶。那么假定第一次跳的是1阶,那么剩下的是n-1个台阶,跳法是f(n-1); *      b. 假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)  *      c. 由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2) *      d. 然后通过实际的情况可以得出:只有一阶的时候 f(1) = 1 ,只有两阶的时候有 f(2) = 2  *      e. 可以发现最终得出的是一个斐波那契数列:   *                  | 1, (n=1) *          f(n) =  | 2, (n=2) *                  | f(n-1)+f(n-2) ,(n>2,n为整数) */public class Solution {    public static void main(String[] args) {        Solution solution = new Solution();        System.out.print("请输入台阶数:");        @SuppressWarnings("resource")        Scanner in = new Scanner(System.in);        int floor = in.nextInt();        System.out.println(floor + "阶台阶共有 " + solution.JumpFloor(floor) + " 种跳法!");    }    public int JumpFloor(int target) {        return (target <= 2) ? target : JumpFloor(target-1) + JumpFloor(target-2);    }}
/** * 解法二:递归思想——一般循环解法 * * 对于本题,前提只有1阶或者2阶的跳法。 *      a. 如果两种跳法,1阶或者2阶。那么假定第一次跳的是1阶,那么剩下的是n-1个台阶,跳法是f(n-1); *      b. 假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)  *      c. 由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2) *      d. 然后通过实际的情况可以得出:只有一阶的时候 f(1) = 1 ,只有两阶的时候有 f(2) = 2  *      e. 可以发现最终得出的是一个斐波那契数列:   *                  | 1, (n=1) *          f(n) =  | 2, (n=2) *                  | f(n-1)+f(n-2) ,(n>2,n为整数) */public class Solution {    public static void main(String[] args) {        Solution solution = new Solution();        System.out.print("请输入台阶数:");        @SuppressWarnings("resource")        Scanner in = new Scanner(System.in);        int floor = in.nextInt();        System.out.println(floor + "阶台阶共有 " + solution.JumpFloor(floor) + " 种跳法!");    }    public int JumpFloor(int target) {        int a = 1;        int b = 2;        int result = 0;        if(target == 1) {            result = 1;        } else if(target == 2) {            result = 2;        } else {            for(int i = 0; i < target - 2; i++) {                result = a + b;                a = b;                b = result;            }        }        return result;    }}
/** * 解法三:排列组合——说实话,还是没太懂这种做法 *  * 问题描述:青蛙可跳1-2级台阶,现在需要跳n个台阶,共有多少种跳法  * 问题解析:设共跳x个1级台阶,y个2级台阶,可推出x+2y=n --> x=n-2y, *      最终问题为对n-2y个一级台阶与y个二级台阶排列组合,即C(n-y,y)。  *      y的范围:y>=0&&y<=(n/2) x的范围:x>=0&&x<=n-2y。 */public class Solution {    public static void main(String[] args) {        Solution solution = new Solution();        System.out.print("请输入台阶数:");        @SuppressWarnings("resource")        Scanner in = new Scanner(System.in);        int floor = in.nextInt();        System.out.println(floor + "阶台阶共有 " + solution.JumpFloor(floor) + " 种跳法!");    }    public int JumpFloor(int target) {        int two; // 跳两级台阶的次数        int count = 0;  // 共有count中跳法        for (two = 0; two <= (target / 2); two++) {            count += com(target - two, two);        }        return count;    }    // 从m中取n个进行排列组合     public int com(int m, int n) {        int i = m;        int j;        int sum = 1;        for (j = 0; j < n; j++, i--) {            sum = sum * i / (j + 1);        }        return sum;    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝喝冰酸奶咳嗽了怎么办 7个月不爱喝奶怎么办 宝宝不认妈妈该怎么办 九个月宝宝不喝牛奶怎么办 吃羊肉和西瓜后怎么办 娃儿感冒了很咳怎么办 5岁娃儿经常感冒发烧怎么办 娃儿冷得发抖感冒怎么办 吃羊肉和茶后怎么办 宝宝胆汁酸高22怎么办 5个月发烧38度怎么办 28个月宝宝不愿把尿怎么办 16个月宝宝咳嗽怎么办 宝宝晚上不用纸尿裤要尿床怎么办 宝宝头型睡偏了怎么办 初生婴儿鼻子被奶块堵住怎么办 月经排的不顺畅怎么办 四个月的小孩拉肚子怎么办 月经期做了水光怎么办 4个多月的宝宝拉肚子怎么办 2个月婴儿积食怎么办 3个月婴儿积食怎么办 2个月的婴儿干呕怎么办 脚上的皮烂了怎么办 嘴皮里面烂了怎么办 未满月婴儿拉屎很费劲怎么办 新生儿血钙1.7怎么办啊 3个月宝宝胃口小怎么办 3个月宝宝缺钙怎么办 五个月宝宝吃手睡觉怎么办 2个月宝宝有蛲虫怎么办 四个月婴儿漏屎怎么办 母乳喂养6个月才11斤怎么办 过期的果泥肉泥怎么办? 孩子被开水烫了怎么办 小儿喝开水烫了怎么办 小孩不识字怎么办17-18 3岁宝宝不识数字怎么办 小孩数字写反了怎么办 3岁宝宝乱啃东西怎么办 闹钟的指针松了怎么办