1. 程式人生 > >LeetCode Climbing Stairs

LeetCode Climbing Stairs

Problem

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.

Example 1:

Input: 2 Output: 2 Explanation: There are two ways to climb to the top.

  1. 1 step + 1 step
  2. 2 steps Example 2:

Input: 3 Output: 3 Explanation: There are three ways to climb to the top.

  1. 1 step + 1 step + 1 step
  2. 1 step + 2 steps
  3. 2 steps + 1 step

再經典不過的爬樓梯問題。每次只能上1或2級臺階,問n級臺階,多少種走法。

Java 實現


package com.coderli.leetcode.algorithms.easy;

/**
 * ou are climbing a stair case. It takes n steps to reach to the top.
 * <p>
 * Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
 * <p>
 * Note: Given n will be a positive integer.
 * <p>
 * <p>
 * Example 1:
 * <p>
 * Input: 2
 * Output:  2
 * Explanation:  There are two ways to climb to the top.
 * <p>
 * 1. 1 step + 1 step
 * 2. 2 steps
 * Example 2:
 * <p>
 * Input: 3
 * Output:  3
 * Explanation:  There are three ways to climb to the top.
 * <p>
 * 1. 1 step + 1 step + 1 step
 * 2. 1 step + 2 steps
 * 3. 2 steps + 1 step
 *
 * @author OneCoder 2017-11-08 22:03
 */
public class ClimbingStairs { public static void main(String[] args) { String s = "a" + "b" + "c" + "d"; ClimbingStairs climbingStairs = new ClimbingStairs(); System.out.println(climbingStairs.climbStairsWithRecursion(3)); System.out.println(climbingStairs.climbStairsWithRecursion
(10)); System.out.println(climbingStairs.climbStairsWithRecursion(44)); System.out.println(climbingStairs.climbStairs(44)); } public int climbStairsWithRecursion(int n) { if (n == 1) { return 1; } else if (n == 2) { return 2; } else { return climbStairsWithRecursion(n - 1) + climbStairsWithRecursion(n - 2); } } public int climbStairs(int n) { if (n == 1) { return 1; } int prev = 1; int cur = 2; for (int i = 3; i <= n; i++) { int temp = cur; cur += prev; prev = temp; } return cur; } }

分析

典型的動態規劃思路。因為只能爬1或2級臺階。所以,爬到n階,最後一步只能是n-1階走一步,或者n-2階,走2步。因此n階的走法=n-1階走法+n-2階走法。依次類推。

最簡單的寫法,就是遞迴了。不過時間超時。改成一個遞推寫法,就好了。