一、题目叙述:
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?
Note: Given n will be a positive integer.
Subscribe to see which companies asked this question.
二、解题思路:
Esay题,但我写了好一会,简单来讲,直接用数学公式计算阶乘等等即可,但注意,这里要注意int数值越界问题。最终把临时变量sum1换成double类型的才通过。(肯定有好的方法啦。。。)
(1)求共有多少种爬楼梯方法,爬几次2,爬几次1。
(2)针对上面每种情况,计算不同的组合,最后将每种情况下计算出的组合数相加即为结果,注意存放阶乘的临时变量若为int型有可能越界,所以此处的处理方法是将其用double类型存储了。。。
三、源码:
public class Solution
{
public int climbStairs(int n)
{
int sum = 1; //sum of distinct ways
int twosum = n / 2;
for (int i = 1; i <= twosum; i++)
{
double sum1 = 1;
int q;
int onesum = n - 2 * i;
if (onesum > i)
{
q = onesum;
for (int j = 1; j <= i; j++)
{
sum1= sum1 * (1 + q);
q ++;
}
for (int k = i; k > 1; k--)
sum1 = sum1 / k;
sum += sum1;
}
else
{
q = i;
for (int j = 1; j <= onesum; j++)
{
sum1= sum1 * (1 + q);
q ++;
}
for (int k = onesum; k > 1; k--)
sum1 = sum1 / k;
sum += sum1;
}
}
return sum;
}
public static void main(String args[])
{
//String a = "";
//String b = "";
// int[] digits = {0};
Solution solution = new Solution();
// int[][] abc = {{2}};
// int[] b = {2,3,4};
// for(int i = 0; i < abc.length; i ++)
// solution.rotate(abc);
System.out.print(solution.climbStairs(35));
}
}