1.题目
2.解一
主要思路:自己的想法,内存和时间占用好像都不少。i为爬一个台阶的的个数,j为爬两个台阶的个数,通过循环计算出所有满足i*1+j*2 == n的i和j,再对i和j进行排列组合的计算。
当全为一个台阶或者全为两个台阶时都只有一种排列方式,当既存在一个台阶又存在两个台阶时就需要计算。比如说,当n=5,i=1,j=2时,两次两个台阶一次一个台阶就能爬上5个台阶。
需要计算的就是1,2,2的排列个数,这里引入阶乘计算即可。
3.解二
主要思路:官方和评论区大神的主要思路,记忆化递归。之前想到了要用递归来写,但是写出来以后发现时间计算过长,然后就看到了这个方法(此时小白的心情大概就是:!!!真牛啊)
看了好久才一知半解,如果要深入了解可能要系统的学习一下DP之类的,不太符合我的职业规划和需求,就暂且搁置了(当然,极有可能学了也学不懂)。
简而言之,当台阶数为n时,此时需要爬的台阶数为f(n),那么f(n)可以表示为f(n-1)+f(n-2),即递归方法,只需要确定f(1)和f(0)就可以了。对于f(1)=1个人认为十分之好理解,
但是f(0)=1,从逻辑上我没有特别理解,只能说当n=2时举个例子算出来的。而记忆化递归相对于递归,根据我查到的说法,即是把需要递归算的前面的值都存储起来,不需要每次都算一遍,
这样就极大的节省了空间和时间。
补充:一个更加简单易懂的写法。
标签:需要,台阶,递归,数为,个数,计算,70,D7,leetcode From: https://www.cnblogs.com/Lu-lu-000/p/16970509.html