LeetCode刷题-爬楼梯

爬楼梯

问题描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

样例

  1. 输入: 2
    输出: 2
    解释: 有两种方法可以爬到楼顶。
    1:1 阶 + 1 阶
    2:2 阶

  2. 输入: 3
    输出: 3
    解释: 有三种方法可以爬到楼顶。
    1:1 阶 + 1 阶 + 1 阶
    2:1 阶 + 2 阶
    3:2 阶 + 1 阶

Code1

时间复杂度O(n),空间复杂度O(1)

int climbStairs(int n) {
	int prev=0;
	int cur=1;
	for(int i=1; i<=n; ++i) {
		int tmp=cur;
		cur+=prev;
		prev=tmp;
	}
	return cur;
}

Code2

时间复杂度O(1),空间复杂度O(1)

int climbStairs(int n) {
	const double s=sqrt(5);
	return floor((pow((1+s)/2, n+1) + +pow((1-s)/2, n+1))/s + 0.5);
}

若有疑问欢迎评论!

你可能感兴趣的:(LeetCode)