Climbing Stairs

Easy Dynamic Programming
Count the distinct ways to climb n stairs taking 1 or 2 steps at a time (Fibonacci-style DP).

Sample input

5

Sample output

8

Solution

def climb_stairs(n):
    a, b = 1, 1
    for _ in range(n):
        a, b = b, a + b
    return a

print(climb_stairs(5))
function climbStairs(n) {
  let a = 1, b = 1;
  for (let i = 0; i < n; i++) {
    [a, b] = [b, a + b];
  }
  return a;
}

console.log(climbStairs(5));
public class Main {
    static int climbStairs(int n) {
        int a = 1, b = 1;
        for (int i = 0; i < n; i++) {
            int next = a + b;
            a = b;
            b = next;
        }
        return a;
    }

    public static void main(String[] args) {
        System.out.println(climbStairs(5));
    }
}
fun climbStairs(n: Int): Int {
    var a = 1
    var b = 1
    repeat(n) {
        val next = a + b
        a = b
        b = next
    }
    return a
}

fun main() {
    println(climbStairs(5))
}
func climbStairs(_ n: Int) -> Int {
    var a = 1, b = 1
    for _ in 0..<n {
        let next = a + b
        a = b
        b = next
    }
    return a
}

print(climbStairs(5))
int climbStairs(int n) {
  int a = 1, b = 1;
  for (var i = 0; i < n; i++) {
    final next = a + b;
    a = b;
    b = next;
  }
  return a;
}

void main() {
  print(climbStairs(5));
}
#include <iostream>
using namespace std;

int climbStairs(int n) {
    int a = 1, b = 1;
    for (int i = 0; i < n; i++) {
        int next = a + b;
        a = b;
        b = next;
    }
    return a;
}

int main() {
    cout << climbStairs(5) << endl;
    return 0;
}
#include <stdio.h>

int climbStairs(int n) {
    int a = 1, b = 1;
    for (int i = 0; i < n; i++) {
        int next = a + b;
        a = b;
        b = next;
    }
    return a;
}

int main() {
    printf("%d\n", climbStairs(5));
    return 0;
}