注意:本题与常见的青蛙爬楼梯属于同一个题
题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
分析:题目要求很明确,我们可以分两步进行完成,首先删除题目中的值为 0 的元素,然后在最后加上值为 0 的元素。
class Solution:
# dp[i] = dp[i-1]+dp[i-2]
def climbStairs(self, n: int) -> int:
dp = []
dp.append(1) # 初始状态,只有1阶的时候有一种走法
dp.append(2) # 有2阶的时候有两种走法
if n==1: #终止条件
return 1
if n==2: #终止条件
return 2
for i in range(2,n):
dp.append(dp[i-1]+dp[i-2]) #递归
return dp[-1] #返回最后一个值
知识点:讲解一下递归部分的使用,调用递归时,首先计算第一个式子的值(即dp[i - 1]),然后进行自己调用自己的过程,直到到达终止条件,然后进行第二个式子的值(即dp[i - 2]),当进行调用这个式子的时候,首先还是从头开始计算递归式,即还是计算dp[i - 1]的值,然后自己调用自己,直到到达终止条件,然后计算第二个式子(dp[i - 2])的值,一直循环下去,我们就可以找出所有到达第N阶台阶的方法。