NOTE

变态跳台阶

通过递推公式和规律推导每次可跳任意级台阶时的跳法数量。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

2. 思路

  • 公式法
// 式子1:f(n) = f(n-1) + f(n-2) + ... + f(1)
// 式子2:f(n-1) = f(n-2) + ... + f(1)
// 式子1-式子2 -> f(n) = 2f(n-1)
  • 找规律
//1 1
//2 2
//3 4
//4 8
//n 2^(n-1)

3. 实现

3.1. 公式法

// 式子1:f(n) = f(n-1) + f(n-2) + ... + f(1)
// 式子2:f(n-1) = f(n-2) + ... + f(1)
// 式子1-式子2 -> f(n) = 2f(n-1)
//时间复杂度:O(n)
//空间复杂度:O(1)
func JumpFloorII(number int) int {
	if number == 1 {
		return number
	}

	a := 1
	res := 2 * a
	for i := 2; i < number; i++ {
		a = res
		res = 2 * a
	}
	return res
}

3.2. 找规律

//找规律
//1 1
//2 2
//3 4
//4 8
//n 2^(n-1)
//时间复杂度:O(1)
//空间复杂度:O(1)
func JumpFloorII2(number int) int {
	if number <= 1 {
		return 1
	}
	return 2 << (number - 2)
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看