leetcode Climbing Stairs
2015-05-07 16:35
218 查看
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
原题链接:https://oj.leetcode.com/problems/climbing-stairs/
题目:你在爬楼梯。需要 n 步才能到顶部。
每次你爬1 或 2 步。有多少种独立的爬到顶部的方式?
思路:首先很容易就想到了递归的解法。但是超时了。
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
原题链接:https://oj.leetcode.com/problems/climbing-stairs/
题目:你在爬楼梯。需要 n 步才能到顶部。
每次你爬1 或 2 步。有多少种独立的爬到顶部的方式?
思路:首先很容易就想到了递归的解法。但是超时了。
[java]
view plaincopy
public int climbStairs(int n) {
if(n < 0)
return 0;
if(n <= 1)
return 1;
return climbStairs(n - 1) + climbStairs(n - 2);
}
所以采用非递归的方式,其实此题类似于求斐波那契数列的和,但是递归不仅慢还可能溢出。下面采用非递归的方法,其中pre代表前n-1台阶的方法数,current代表第n台阶的方法数。
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
原题链接:https://oj.leetcode.com/problems/climbing-stairs/
题目:你在爬楼梯。需要 n 步才能到顶部。
每次你爬1 或 2 步。有多少种独立的爬到顶部的方式?
思路:首先很容易就想到了递归的解法。但是超时了。
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
原题链接:https://oj.leetcode.com/problems/climbing-stairs/
题目:你在爬楼梯。需要 n 步才能到顶部。
每次你爬1 或 2 步。有多少种独立的爬到顶部的方式?
思路:首先很容易就想到了递归的解法。但是超时了。
[java]
view plaincopy
public int climbStairs(int n) {
if(n < 0)
return 0;
if(n <= 1)
return 1;
return climbStairs(n - 1) + climbStairs(n - 2);
}
所以采用非递归的方式,其实此题类似于求斐波那契数列的和,但是递归不仅慢还可能溢出。下面采用非递归的方法,其中pre代表前n-1台阶的方法数,current代表第n台阶的方法数。
//迭代 C++ // LeetCode, Climbing Stairs // 迭代,时间复杂度 O(n),空间复杂度 O(1) class Solution { public: 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; } };
/n阶楼梯的方法数是 从n-1阶楼梯走一步上去 或者从n-2阶楼梯走一步上去 an依赖于an-1和an-2 an=an-1+an-2 class Solution { public: int climbStairs(int n) { int step1 = 1; //0 stair int step2 = 1; //1 stair for(int i = 2; i <= n; i ++) { int nextstep = step1 + step2; step1 = step2; step2 = nextstep; } return step2; } };
相关文章推荐
- LeetCode:70. Climbing Stairs
- Climbing Stairs-LeetCode
- leetCode: Climbing Stairs
- LeetCode:Plus One, Add Binary, Sqrt(x), Climbing Stairs
- leetcode 70: Climbing Stairs
- 【LeetCode with Python】 Climbing Stairs
- [LeetCode]--Climbing Stairs
- leetcode 虐我篇之(二十一)Climbing Stairs
- leetcode-70 Climbing Stairs
- LeetCode:Climbing Stairs
- [leetcode] Climbing Stairs
- LeetCode70——Climbing Stairs
- LeetCode | Climbing Stairs
- 【leetcode】【70】Climbing Stairs
- 【题解】【DP】【Leetcode】Climbing Stairs
- LeetCode: Climbing Stairs
- [Leetcode 70, easy] Climbing Stairs
- [LeetCode] Climbing Stairs
- Leetcode[72]-Climbing Stairs
- 【LeetCode】遇到一个很有趣的问题:Climbing Stairs