爬楼梯 - 斐波那契数列

func climbStairs(n int) int {
	dp0 := 1
	dp1 := 1
	for i := 1; i < n; i++ {
		dp0, dp1 = dp1, dp0 + dp1
	}
	return dp1
}

爬楼梯 - 完全背包排列问题

func climbStairs(n int) int {
	// 完全背包排列问题
	// 可以解决一次爬任意台阶
	steps := [2]int{ 1, 2 }
 
	// dp[i]: 爬到第 i 级台阶,有 dp[i] 种爬法
	dp := make([]int, n + 1)
	dp[0] = 1
	for i := 1; i <= n; i++ {
		for _, step := range steps {
			if i - step >= 0 {
				dp[i] += dp[i - step]
			}
		}
	}
 
	return dp[n]
}