climbing stairs:
总共n级,每次可以选择走一级或者两级,总共有多少种走法:
递归算法:
if n == 0:
return 0
if n == 1:
return 1
if n == 2:
return 2
return self.climbStairs(n-1) + self.climbStairs(n-2)
出现了超时,记得算法导论中讲到过,挨个算比递归复杂度要低:
if n == 0:
return 0
if n == 1:
return 1
if n == 2:
return 2
fn_1 = 2
fn_2 = 1
for i in range(3,n+1):
fn = fn_1 + fn_2
fn_2 = fn_1
fn_1 = fn
return fn
Bingo!