[LeetCode][Java] Climbing Stairs

来源:互联网 发布:php文件上传源代码 编辑:程序博客网 时间:2024/06/05 08:27

题目:

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

题意:

假设爬梯子,你需要n步跑到顶。

每次你只能爬1步或者2步。最终你有多少种不同的方式爬到顶。


算法分析:

    爬梯子问题实质上就是斐波那契数列:

 * 当n=1时,ways=1
 * 当n=2时,有[2] [1,1]两种情况,ways=2
 * 当n=3时,有[1,1,1] [1,2] [2,1]三种情况,ways=3
 * 当n=4时,有[1,1,1,1] [2,2] [1,1,2] [1,2,1] [2,1,1]五种情况,ways=5
 * 当n=5时,有[1,1,1,1,1] [2,2,1] [2,1,2] [1,2,2] [1,1,1,2] [1,1,2,1] [1,2,1,1] [2,1,1,1]八种情况,ways=8
 * 当n>3时,n对应的情况数字为n-1和n-2之和。此时,规律正好和斐波那契数列出现的规律对应。
 * 斐波拉切数列是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,其被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2)

代码如下

public class Solution {    //用递归超时了 ==+   /*public  int climbStairs(int n)     {    int res = 0;if(n==0) res= 0;if(n==1) res= 1;if(n==2) res= 2;if(n>2) res= climbStairs(n-1)+climbStairs(n-2);return res;        }*/    //改用数组    public int climbStairs(int n)    {    int res[] = new int[n+1];int i=0;    for(i=0;i<n+1;i++)    {if(i==0) res[i]= 0;if(i==1) res[i]= 1;if(i==2) res[i]= 2;if(i>2)res[i]=res[i-1]+res[i-2];    }    return res[n];    }}


0 0
原创粉丝点击