题目:
有⼀座⾼度是k级台阶的楼梯,从下往上⾛,每跨⼀步只能向上1级或者3级台阶。请⽤你认
为最优的⽅法求⼀共有多少种⾛法。例如给定楼梯台阶数k为3,⼀共有2种⾛法。要求算法
的时间复杂度需要⼩于O(2的n次⽅),可以⽤任何语⾔实现。 输⼊:楼梯台阶数k。 输出:
⾛法总数。
分析:
楼梯走法定义为函数f(k),k为楼梯台阶数量,分析题目可得出:
当k>3时,f(k) = f(k-1) + f(k-3)
定义一个数组,用于存储台阶数和走法总数的关系即可。
代码:
func main() {
fmt.Println(cal(4))
}
func cal(k int) int {
if k < 3 {
return 1
}
if k == 3 {
return 2
}
f := make([]int, k+1)
f[0] = 0
f[1] = 1
f[2] = 1
f[3] = 2
for i := 4; i <= k; i++ {
f[i] = f[i-1] + f[i-3]
}
return f[k]
}