1. 程式人生 > >leetcode 746. 使用最小花費爬樓梯

leetcode 746. 使用最小花費爬樓梯

陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。

每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。

您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1 的元素作為初始階梯。

示例 1:

輸入: cost = [10, 15, 20]
輸出: 15
解釋: 最低花費是從cost[1]開始,然後走兩步即可到階梯頂,一共花費15。

 示例 2:

輸入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
輸出: 6
解釋: 最低花費方式是從cost[0]開始,逐個經過那些1,跳過cost[3],一共花費6。

注意:

  1. cost 的長度將會在 [2, 1000]
  2. 每一個 cost[i] 將會是一個Integer型別,範圍為 [0, 999]

這道題是一道動態規劃題,我們可以從題目中得到的資訊是每一次可以走一步或者兩步,但是走一步或者兩步的花費都是相同的,由此可以得到遞迴式如下:

dp[0] = cost[0]

dp[1] = cost[1]

dp[n] = min (dp[n-1] , dp[n-2]) + cost[i]

最後輸出min(dp[size-1] , dp[size-2])   ,因為最後可以是一步上去的也可以是兩步上去的

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        //遞推式為 dp[n] = min(dp[n-1], dp[n-2]) + cost[n]
        int size = cost.size();   //獲取樓梯的層數
        int dp[size] = {0};          //記錄每一級臺階的最低花費
        if(size == 2){            //如果樓梯層數在2層的時候,返回較小的那個
            if(cost[0] < cost[1])
                return cost[0];
            else
                return cost[1];
        }
        dp[0] = cost[0];
        dp[1] = cost[1];
        for(int i=2;i<size;i++){
            if(dp[i-2] < dp[i-1])
                dp[i] = dp[i-2] + cost[i];
            else
                dp[i] = dp[i-1] + cost[i];
        }
        if(dp[size-1] < dp[size-2])
            return dp[size-1];
        else
            return dp[size-2];
    }
};

相關推薦

LeetCode 746代價樓梯

題目: 陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i]索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為

Leetcode-------使用花費樓梯

746. 使用最小花費爬樓梯 陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始

leetcode 746. 使用花費樓梯(python)

陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1

[LeetCode]746. 使用花費樓梯(Min Cost Climbing Stairs)

一、題目: LeetCode地址​​​​​​​ 陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在

28.動態規劃-使用花費樓梯-Leetcode 746(python)

題目描述 陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選

leetcode 746:使用花費樓梯

定義一個數組用來儲存最小的體力花費值,當前階梯i值的最小的體力花費值當前的階梯i當前的體力值+第i-1的最小體力值,第i-2的最小體力值的較小的一個 d[i]=std::min(d[i-1]+cost[i],d[i-2]+cost[i]); int minCostClimbingSta

LeetCode 746. 使用花費樓梯(C++、python)

陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1

leetcode-746. 使用花費樓梯

一、問題描述陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或

[LeetCode javaScript] 746. 使用花費樓梯

陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 costi。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1 的元素作為初始階梯。 示例

leetcode 746. 使用花費樓梯

陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1

使用花費樓梯 (LeetCode

描述 你需要爬上一個N層的樓梯,在爬樓梯過程中,每階樓梯需花費非負代價,第i階樓梯花費代價表示為cost[i],一旦你付出了代價,你可以在該階基礎上往上爬一階或兩階。你可以從第0階或者第1階開始,請找到到達頂層的最小的代價是多少 N和cost[i]皆為整數,且N∈[2

LeetCode Problem 使用花費樓梯 Python

爬到索引為i的樓梯(第一層索引為0)的最小花費r[i]=min(r[i-1] + cost[i-1], r[i-2] + cost[i-2]), 確定了狀態轉移方程。但是注意r[i]定義為爬到第i層,並沒有爬完整個樓梯,所以最後返回值並不是r[-1],而是min(r[-1]+

746使用花費樓梯

class Solution { public: int minCostClimbingStairs(vector<int>& cost) { //動態規劃,確定好狀態,dp[i]表示跳到i階花的代價 //所

使用花費樓梯dp

陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1 的元素作為初始階梯。

Leetcode746.Min Cost Climbing Stairs使用花費樓梯

陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或

leetcode746. 使用花費樓梯 動態規劃簡單題 python3

          陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從

leetcode746_使用花費樓梯

 陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1 的元素作

LeetCode746題:使用花費樓梯

思路:  這題與LeetCode198題“打家劫舍”屬於相同題型,都涉及到動態規劃的思想。 對於第i階樓梯來說,有兩種情況,要麼走第i階樓梯,要麼直接跨過第i階樓梯。而最終要求從1階登過i階的最小總花費cost(i)就可以用下面的公式表示: cost(i) = min

LeetCode746. 使用花費樓梯

陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1

使用花費樓梯(Min Cost Climbing Stairs) Java動態規劃入門分析一

前言 題幹 陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。