计算爬楼梯的走法
对于一个给定步数的楼梯,一次可以向前走一步或者两步,计算有多少种走法
如果使用递归的方法计算,那么会很容易,就是func(n-1)+func(n-2),但是当楼梯步数很多的时候,这个方法是不行的,但是我们可以借鉴他的思想,就是对于有n阶的楼梯,他的走法等于n-1阶楼梯的走法加上n-2阶楼梯的走法。
所以为了避免当N很大的时候难以计算,我们使用两个变量存储中间结果,第一个变量是n-1阶楼梯的走法数量,第二个变量是n-2阶楼梯的走法数量
package main
import "fmt"
// 给定一个步数的楼梯,每次可以选择向前走一步或者两步,计算一共有多少种走法
func main() {
fmt.Println(climbStairs(2))
fmt.Println(climbStairs(3))
fmt.Println(climbStairs(4))
fmt.Println(climbStairs(5))
}
func climbStairs(n int) int {
twoStepLess, oneStepLess := 1, 2
if n < 3 {
return n
}
for i := 3; i <= n; i++ {
tmp := twoStepLess + oneStepLess
twoStepLess = oneStepLess
oneStepLess = tmp
}
return oneStepLess
}
这个思路其实和递归反着来的,递归算法是从n计算到1或者2,这个算法就是从1或者2计算到n
浙公网安备 33010602011771号