答题思路见代码注释

import java.util.*;


public class Solution {
    public int minCostClimbingStairs (int[] cost) {
      	// 做一个数组来记录每一个cost节点 从底层爬到自身位置的最小费用总和
        int[] nodeMinCost = new int[cost.length];
      	// 因为可以从0或1层选择开爬,因此这两个都是初始化数据,直接用数组的费用初始化
        nodeMinCost[0] = cost[0];
        nodeMinCost[1] = cost[1];
        for (int i = 2; i < cost.length; i++) {
          	// 由于可以选择爬一步或两步,因此每一个节点的最小费用开销总和等于前方第一个节点和前方第二个节点二者的费用最小者
            nodeMinCost[i] = Math.min(nodeMinCost[i-1], nodeMinCost[i-2]) + cost[i];
        }
      	// 由于最后边可以再倒二级台阶两步跨到终点,因此结果是最后一级和倒二级台阶二者的费用最小者
        return Math.min(nodeMinCost[cost.length-1], nodeMinCost[cost.length-2]);
    }
}