從LeetCode學演算法 - 9 Dynamic Programming (2)

0070. Climbing Stairs (Easy)

Chih-Yu Lin

--

Question:
You are climbing a staircase. 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

分析/解題:
題目描述有一個要爬n階才能到頂端的階梯,每次只能爬1階或2階,
試求有多少種不同的方法可以走到頂端。
如果以窮舉的話我們可能需要列很久,
所以這時候又回到了看看是否能找出相互關係的時候了。

我們考慮要爬n階的話,首先要先爬到n-1階或n-2階,因為只有一次走1階或一次走2階的選擇。也就是說,走到n階的方法,就相當於走到n-1階的方法和走到n-2階的方法和。因為最後的步伐已經固定了,我們同時還可以保證這兩個方法的組合之間不會互相重複(一個最後走1步,一個最後走2步)。

同樣的,走到n-1階的方法=走到(n-2)階的方法+走到(n-3)階的方法,
以此類推拆解,最終我們來到走到第1階的方法跟走到第2階的方法,
分別是1跟2。

我們可以選擇開一個res的陣列,初始化前2階以後,
一路加上去最終得到到第n階的方法數,下面Java的版本因為陣列由0開始,
有刻意將數字不先行化簡,讀者應該可以很簡單地對照。

Java:

--

--

Chih-Yu Lin
Chih-Yu Lin

Written by Chih-Yu Lin

LeetCode、Python、Java、Android;第11屆iT邦幫忙鐵人賽Software Development組優選(從LeetCode學演算法);HiSKIO特約講師;課程優惠: https://bit.ly/lc2022all ;合作請洽: learnwithdesolve@gmail.com

Responses (1)