爬楼梯问题(递归与动态规划)

2,411 阅读1分钟

问题:一个人爬楼梯,每次只能爬1个或2个台阶,假设有n个台阶,那么这个人有多少种不同的爬楼梯方法?

1.递归

 public int upStatir(int n){
	if (n == 1) {
		return 1;
	}

	if (n == 2) {
		return 2;
	}

	return upStatir(n-1) + upStatir(n-2);
}


时间复杂度:O(2^N) 空间复杂度时间复杂度:O(N)

2.动态规划

  public int f(int n) {
	if (n == 1) return 1;
	if (n == 2) return 2;
	// a 保存倒数第二个子状态数据,b 保存倒数第一个子状态数据, temp 保存当前状态的数据
	int a = 1, b = 2;
	int temp = a + b;
	for (int i = 3; i <= n; i++) {
		temp = a + b;
		a = b;
		b = temp;
	}
	return temp;
}

时间复杂度:O(N) 空间复杂度时间复杂度:O(1)
比递归降低了空间复杂度,时间复杂度

预告下一期:背包问题