leetcode70
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了有多少种情况。
简单题,注重一下考虑问题的思路。
到N,只能从N-1和N-2到N,别的均不能直接到N,所以,马上给出递归的算式,前面给出特殊情况的返回。
public class Solution { public int climbStairs(int n) { if(n<=2) return n; else return climbStairs(n-1) + climbStairs(n-2); } }
然后交了,TLE。
发现递归超时,马上想到,所有的递归均可以用迭代实现,于是,迭代。然后迭代思考过程中发现,这他妈就是个斐波那契数列。。。。然后就没有然后了。
我真蠢。
public class Solution { public int climbStairs(int n) { if(n<=2) return n; int a = 1; int b = 2; int c = a + b; for(int i=2;i<n-1;i++) { a = b; b = c; c = a+b; } return c; } }