题目:

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?

Note: Given n will be a positive integer.

Approach #1 Brute Force [Time Limit Exceeded]

public class Solution {
public int climbStairs(int n) {
climb_Stairs(0, n);
}
public int climb_Stairs(int i, int n) {
if (i > n) {
return 0;
}
if (i == n) {
return 1;
}
return climb_Stairs(i + 1, n) + climb_Stairs(i + 2, n);
}
}

Time complexity : O(2^n). Size of recursion tree will be 2^n​​.

Space complexity : O(n). The depth of the recursion tree can go upto n.

Approach #2 Recursion with memorization [Accepted]

public class Solution {
public int climbStairs(int n) {
int memo[] = new int[n + 1];
return climb_Stairs(0, n, memo);
}
public int climb_Stairs(int i, int n, int memo[]) {
if (i > n) {
return 0;
}
if (i == n) {
return 1;
}
if (memo[i] > 0) {
return memo[i];
}
memo[i] = climb_Stairs(i + 1, n, memo) + climb_Stairs(i + 2, n, memo);
return memo[i];
}
}

Time complexity : O(n). Size of recursion tree can go upto n.

Space complexity : O(n). The depth of recursion tree can go upto n.

Approach #3 Dynamic Programming [Accepted]

public class Solution {
public int climbStairs(int n) {
if (n == 1) {
return 1;
}
int[] dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}

Time complexity : O(n). Single loop upto n.

Space complexity : O(n). dp array of size n is used.

Approach #4 Fibonacci Number [Accepted]:

public class Solution {
public int climbStairs(int n) {
if (n == 1) {
return 1;
}
int first = 1;
int second = 2;
for (int i = 3; i <= n; i++) {
int third = first + second;
first = second;
second = third;
}
return second;
}
}

Time complexity : O(n). Single loop upto n is required to calculate n^{th} fibonacci number.

Space complexity : O(1). Constant space is used.

原文:https://leetcode.com/articles/climbing-stairs/

最新文章

  1. python 中文编码问题
  2. 《K&amp;R》里贯穿全书的代码
  3. C#中的var类型
  4. iOS 开发之照片框架详解(3)
  5. Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量
  6. url 编码(percentcode 百分号编码)
  7. 【Todo】各种排序整理
  8. HDU1007最近点对(分治)
  9. Git CMD - tag: Create, list, delete or verify a tag object signed with GPG
  10. 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
  11. 在Mac OS X中搭建STM32开发环境(1)
  12. Keepalived实现Redis Failover
  13. 读书笔记:java并发
  14. sql 中的 indexOf 与 lastIndexOf
  15. firebug使用
  16. Java进阶篇设计模式之十二 ---- 备忘录模式和状态模式
  17. Flutter环境搭建
  18. IntelliJ IDEA 注册码 (秘钥)
  19. 配置Tomcat配置路径
  20. 分布式理论(五)—— 一致性算法 Paxos

热门文章

  1. Kubernetes集群(概念篇)
  2. 九度OJ--1163(C++)
  3. 并查集——poj2524(入门)
  4. 用OneNote写博客的方法
  5. htm,html,xhtml,xml,xsl,dhtml,shtm和shtml的区分
  6. [Elasticsearch] 多字段搜索 (五) - 以字段为中心的查询
  7. Visual Source Safe的使用方法
  8. BZOJ4557 JLOI2016侦察守卫(树形dp)
  9. 【题解】APIO2013机器人
  10. [洛谷P2384]最短路