可以用枚举法和归纳法来解答。
创新互联建站是一家以成都网站建设、网页设计、品牌设计、软件运维、成都网站营销、小程序App开发等移动开发为一体互联网公司。已累计为成都汽车玻璃修复等众行业中小客户提供优质的互联网建站和软件开发服务。
一、枚举法
11级台阶,如果每次跨2级,最多可跨5次。所以,可以分六种情况来考虑:
1、每次都只跨一级台阶,这样的走法只有1种。
2、有一次跨二级台阶,其余每次都跨一级台阶,这样的走法有10=种。
3、有两次跨二级台阶,其余每次都跨一级台阶,这样的走法有8+7+6+5+4+3+2+1=36种。
4、有三次跨二级台阶,其余每次都跨一级台阶,这样的走法有(6+5++4+3+2+1)+(5+4++3+2+1)+(4+3+2+1)+(3+2+1)+(2+1)+1=56种。
5、有四次跨二级台阶,其余每次都跨一级台阶,这样的走法有36种。(算式略)
6、有五次跨二级台阶,其余每次都跨一级台阶,这样的走法有6种。
所以,一共有1+10+36+56+35+6=144=
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶 和 2 阶
解题思路:
实现了两种方法,但是第一种超出时间限制(。ì _ í。),因为递归的时候方法实际计算了两次。两种方法都使用了动态规划思想,比如对于爬10阶楼梯,我们最后一步爬上第10阶只会有两种情况,一种是从9阶楼梯爬1个台阶,一种是从8阶台阶爬2两个台阶上来。所以10阶台阶问题可以划分为爬9阶和8阶两个子问题,一直递归划分到只剩2阶(2种方法)和1阶(一种方法)。
超出时间限制的代码:
class Solution:
def climbStairs(self, n: int) - int:
if n=2:
if n==2:
可以看出来的是,该题可以用斐波那契数列解决。
楼梯一共有n层,每次只能走1层或者2层,而要走到最终的n层。不是从n-1或者就是n-2来的。
F(1) = 1
F(2) = 2
F(n) = F(n-1) + F(n-2) (n=3)
这是递归写法,但是会导致栈溢出。在计算机中,函数的调用是通过栈进行实现的,如果递归调用的次数过多,就会导致栈溢出。
针对这种情况就要使用方法二,改成非递归函数。
将递归进行改写,实现循环就不会导致栈溢出
def fun():
i = 0
n = 7 * i
while ((n % 2 == 1) and (n % 3 == 2) and (n % 5 == 4) and (n % 6 == 5)) == 0:
i = i + 1
n = 7 * i
return n
算出来是119