# 746.min-cost-climbing-stairs

## Statement

``````输入：cost = [10,15,20]

- 支付 15 ，向上爬两个台阶，到达楼梯顶部。

``````

``````输入：cost = [1,100,1,1,1,100,1,1,100,1]

- 支付 1 ，向上爬两个台阶，到达下标为 2 的台阶。
- 支付 1 ，向上爬两个台阶，到达下标为 4 的台阶。
- 支付 1 ，向上爬两个台阶，到达下标为 6 的台阶。
- 支付 1 ，向上爬一个台阶，到达下标为 7 的台阶。
- 支付 1 ，向上爬两个台阶，到达下标为 9 的台阶。
- 支付 1 ，向上爬一个台阶，到达楼梯顶部。

``````

• `2 <= cost.length <= 1000`
• `0 <= cost[i] <= 999`

You are given an integer array `cost` where `cost[i]` is the cost of `ith` step on a staircase. Once you pay the cost, you can either climb one or two steps.

You can either start from the step with index `0`, or the step with index `1`.

Return the minimum cost to reach the top of the floor.

Example 1:

``````Input: cost = [10,15,20]
Output: 15
Explanation: You will start at index 1.
- Pay 15 and climb two steps to reach the top.
The total cost is 15.
``````

Example 2:

``````Input: cost = [1,100,1,1,1,100,1,1,100,1]
Output: 6
Explanation: You will start at index 0.
- Pay 1 and climb two steps to reach index 2.
- Pay 1 and climb two steps to reach index 4.
- Pay 1 and climb two steps to reach index 6.
- Pay 1 and climb one step to reach index 7.
- Pay 1 and climb two steps to reach index 9.
- Pay 1 and climb one step to reach the top.
The total cost is 6.
``````

Constraints:

• `2 <= cost.length <= 1000`
• `0 <= cost[i] <= 999`

## Solution

``````from typing import List

class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
cost.insert(0, 0)
cost.append(0)
n = len(cost)
f = [0x3f3f3f3f for i in range(n)]
f[0] = 0
for i in range(n):
if i + 1 < n:
f[i + 1] = min(f[i + 1], f[i] + cost[i])
if i + 2 < n:
f[i + 2] = min(f[i + 2], f[i] + cost[i])

return f[-1]
``````