問題の説明
あなたは階段を登っていると仮定します。ニードnはあなたの屋根に到達するため。
たびに、1つまたは2つのステップを登ることができます。どのように多くの異なる方法がそれの屋根に登ることができますか?
注:与えられたnは正の整数です。
例
例1:
入力:2
出力:2
説明:屋根に登ることができる2つの方法があります。
- 1 + 1次オーダー
- ステップ2
例2:
入力:3
出力:3
説明:屋根に登ることができる3つの方法があります。
- ステップ1 + 1 + 1次オーダー
- 2 + 1次オーダー
- 2 + 1次オーダー
実現
ダイナミックプログラミング
場合nは2以上であり、この方法は、Fのn次(N-1)+ F(N-2)の種類のステップ数に到達
def climb_stair(n):
"""
动态规划方法,easy级别
"""
# 开数组
step = list(0 for _ in range(n+1))
step[1] = 1
step[2] = 2
if n == 1:
return 1
for i in range(3, n+1):
step[i] = step[i-1] + step[i-2]
return step[n]
Oの時間複雑度(N)
宇宙複雑さはO(n)