😊
【LeetCode】70. Climbing Stairsを解く
問題概要
階段を上ることを考える.頂上に到達するにはn
ステップかかる.
一度に階段を1
もしくは2
ステップ上ることができるとき,頂上への上り方は何通りあるか答える.
例:
Input: n = 2
Output: 2
1. 1 step + 1 step
2. 2 step
制約
考えたこと
1. 1 step
1. 1 step + 1 step
2. 2 step
階段を■
で表すと,下図のようにn=1
の状況から2 step進む方法と,n=2
の状態から1 step進む方法がある
2 step
┌───┐
■ ■ ■
└─┘
1 step
従って,
n=1 + 2 step
1. 1 step + 2 step
n=2 + 1 step
2. 1 step + 1 step + 1 step
3. 2 step + 1 step
の3通りとなる.
このように,n-2
とn-1
の答えが分かればn
の答えが導けるような問題であることが分かる.
従って,DPを用いて解くことができる.
class Solution(object):
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
dp = [0]*(n+1)
dp[0] = 1
dp[1] = 1
for i in range(2,n+1):
dp[i] = dp[i-2] + dp[i-1]
return dp[n]
Tips
配列dp[i]
は
問題では,
Discussion