{"id":10117,"date":"2025-09-26T14:28:46","date_gmt":"2025-09-26T08:58:46","guid":{"rendered":"https:\/\/namastedev.com\/blog\/?p=10117"},"modified":"2025-09-26T14:51:45","modified_gmt":"2025-09-26T09:21:45","slug":"minimum-cost-climbing-stairs","status":"publish","type":"post","link":"https:\/\/namastedev.com\/blog\/minimum-cost-climbing-stairs\/","title":{"rendered":"Minimum Cost Climbing Stairs"},"content":{"rendered":"\n<!-- PrismJS for Syntax Highlighting -->\n<link href=\"https:\/\/cdn.jsdelivr.net\/npm\/prismjs@1.29.0\/themes\/prism-tomorrow.min.css\" rel=\"stylesheet\">\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/prismjs@1.29.0\/prism.min.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/prismjs@1.29.0\/plugins\/autoloader\/prism-autoloader.min.js\"><\/script>\n\n<style>\n.wp_blog_theme {\n  --primary: #E58C32;\n  --secondary: #030302;\n  --light-bg: #fef9f4;\n  --text-dark: #2d2d2d;\n  --tab-radius: 12px;\n  --shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n  --code-bg: #001f3f;\n  --code-text: #d4f1ff;\n}\n\n.wp_blog_container {\n  font-family: 'Segoe UI', sans-serif;\n  background: var(--light-bg);\n  margin: 0;\n  padding: 0;\n  color: var(--text-dark);\n}\n\n\/* Heading *\/\n.wp_blog_main-heading {\n  text-align: center;\n  font-size: 2.4rem;\n  color: var(--primary);\n  margin-top: 2.5rem;\n  font-weight: bold;\n}\n\n\/* Explanation Card *\/\n.wp_blog_explanation,\n.wp_blog_code-tabs-container {\n  max-width: 940px;\n  margin: 2rem auto;\n  padding: 2rem;\n  background: white;\n  border-radius: var(--tab-radius);\n  box-shadow: var(--shadow);\n}\n\n\/* Text and Visuals *\/\n.wp_blog_explanation h2 {\n  font-size: 1.4rem;\n  color: var(--primary);\n  margin-bottom: 0.5rem;\n}\n\n.wp_blog_explanation p,\n.wp_blog_explanation li {\n  font-size: 1.05rem;\n  line-height: 1.7;\n  margin: 0.5rem 0;\n}\n\n.wp_blog_explanation code {\n  background: #fef9f4;   \/* light bg instead of dark blue *\/\n  color: #E58C32;        \/* brand orange *\/\n  padding: 3px 6px;\n  border-radius: 4px;\n  font-family: 'Courier New', monospace;\n  font-weight: 600;      \/* optional, makes it pop *\/\n}\n\n.wp_blog_explanation img {\n  max-width: 100%;\n  border-radius: var(--tab-radius);\n  margin-top: 1rem;\n  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);\n}\n\n\/* Tab Buttons *\/\n.wp_blog_code-tabs-header {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n\n.wp_blog_code-tab-button {\n  padding: 0.6rem 1.2rem;\n  border: 1px solid var(--primary);\n  background: white;\n  color: var(--primary);\n  border-radius: 50px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.3s ease;\n}\n\n.wp_blog_code-tab-button:hover {\n  background: var(--secondary);\n}\n\n.wp_blog_code-tab-button.active {\n  background: var(--primary);\n  color: white;\n}\n\n\/* Code Content *\/\n.wp_blog_code-tab-content {\n  display: none;\n  background: var(--code-bg);\n  border-radius: var(--tab-radius);\n}\n\n.wp_blog_code-tab-content.active {\n  display: block;\n}\n\n.wp_blog_code-tab-content pre {\n  margin: 0;\n  padding: 1.5rem;\n  font-size: 1rem;\n  overflow-x: auto;\n  background: var(--code-bg);\n  border-radius: var(--tab-radius);\n  color: var(--code-text);\n}\n\n\/* Dark mode variables *\/\n.wp_blog_theme.dark-mode {\n  --light-bg: #121212;\n  --text-dark: #f5f5f5;\n  --shadow: 0 4px 12px rgba(255, 255, 255, 0.08);\n  --code-bg: #1e1e1e;\n  --code-text: #c5f0ff;\n}\n\n.wp_blog_theme.dark-mode .wp_blog_explanation {\n  background: #1e1e1e;\n}\n\n\/* Dark mode code highlight *\/\n.wp_blog_theme.dark-mode .wp_blog_explanation code {\n  background: #333;\n  color: #ffd27f;\n}\n\n.wp_blog_theme {\n  position: relative; \/* makes it the reference for absolute children *\/\n}\n\n.wp_blog_toggle-btn {\n  position: absolute;\n  top: 1rem;\n  right: 1rem;\n  z-index: 9999;\n  padding: 0.5rem 0.8rem;\n  border-radius: 10%;\n  background: var(--primary);\n  color: white;\n  font-weight: bold;\n  cursor: pointer;\n  border: none;\n  box-shadow: var(--shadow);\n  transition: background 0.3s, transform 0.2s;\n}\n\n.wp_blog_toggle-btn:hover {\n  background: #cc772e;\n}\n\n.wp_blog_theme.dark-mode .wp_blog_code-tabs-container {\n  background: #1e1e1e;\n}\n<\/style>\n\n<div class=\"wp_blog_container wp_blog_theme\">\n  <button id=\"blogNotesThemeToggle\" class=\"wp_blog_toggle-btn\">\ud83c\udf19<\/button>\n  <h1 class=\"wp_blog_main-heading\"><\/h1>\n\n  <div class=\"wp_blog_explanation\">\n    <h2>Problem Statement:<\/h2>\n    <p>\n        You are given an integer array <code>cost<\/code> where <code>cost[i]<\/code> is the cost of <code>i<sup>th<\/sup><\/code> step on a staircase. Once you pay the cost, you can either climb one or two steps.\n    <\/p>\n    \n    <p>\n        You can either start from the step with index <code>0<\/code>, or the step with index <code>1<\/code>.\n    <\/p>\n\n    <p>\n        Return <i>the minimum cost to reach the top of the floor.<\/i>\n    <\/p>\n    <h3>Example 1:<\/h2>\n    <p><strong>Input:<\/strong> cost = [10,15,20]<\/p>\n    <p><strong>Output:<\/strong> 15<\/p>\n    <p><strong>Explanation:<\/strong>  \n        You will start at index 1. &#8211; Pay 15 and climb two steps to reach the top. The total cost is 15.\n    <\/p>\n\n    <h3>Example 2:<\/h2>\n    <p><strong>Input:<\/strong> cost = [1,100,1,1,1,100,1,1,100,1]<\/p>\n    <p><strong>Output:<\/strong> 6<\/p>\n    <p><strong>Explanation:<\/strong> \n        You will start at index 0.\n&#8211; Pay 1 and climb two steps to reach index 2.\n&#8211; Pay 1 and climb two steps to reach index 4.\n&#8211; Pay 1 and climb two steps to reach index 6.\n&#8211; Pay 1 and climb one step to reach index 7.\n&#8211; Pay 1 and climb two steps to reach index 9.\n&#8211; Pay 1 and climb one step to reach the top.\nThe total cost is 6.\n<\/p>\n\n    <h3>Constraints<\/h3>\n    <ul>\n       <li><code>2 <= cost.length <= 1000<\/code><\/li>\n       <li><code>0 <= cost[i] <= 999<\/code><\/li>\n    <\/ul>\n    \n<h2>Approach:<\/h2>\n   <ul>\n    <li><strong>Subproblem definition: <\/strong><code>Let dp[i]<\/code> = minimum cost to reach step i.<\/li>\n    <li><strong>Best Case: <\/strong>\n    To stand before the staircase: <code>dp[0] = 0, dp[1] = 0<\/code> (since you can start at step 0 or step 1 for free).\n    <\/li>\n    <li><strong>Transition relation<\/strong>\n    <li>To reach step <code>i<\/code>, you could:\n        <ul>\n            <li>\n                Come from <code>i-1 \u2192 pay dp[i-1] + cost[i-1].<\/code>\n            <\/li>\n            <li>\n                Come from <code>i-2 \u2192 pay dp[i-2] + cost[i-2].<\/code>\n            <\/li>\n            <li>So, <code>dp[i]=min(dp[i\u22121]+cost[i\u22121],\u00a0dp[i\u22122]+cost[i\u22122]).<\/code><\/li>\n    <\/ul>\n    <\/li>\n    <\/li>\n    <li>The <strong>result is dp[n]<\/strong> (minimum cost to step just beyond the last stair).<\/li>\n\n<\/ul>\n\n    <h2>Time & Space Complexity:<\/h2>\n    <p><strong>Time Complexity:<\/strong> <code>O(n)<\/code><\/p>\n    <p><strong>Space Complexity:<\/strong> <code>O(1)<\/code><\/p>\n\n<h2>Dry Run<\/h2> \n<div style=\"background: var(--light-bg); border-left: 4px solid var(--primary); padding: 1rem; border-radius: var(--tab-radius); margin: 1rem 0; color: var(--text-dark);\"> \n  <p><strong>Input:<\/strong> <code>n = 5<\/code><\/p> \n  \n  <pre style=\"white-space: pre-wrap; background: var(--code-bg); padding: 1rem; border-radius: 8px; overflow-x: auto; color: var(--code-text);\">\n\nStep 0: Start Function: climbStairs(5)\nn = 5\ndp = [0, 1, 2]   \/\/ base cases\n\nIteration (i = 3):\n- dp[3] = dp[2] + dp[1] = 2 + 1 = 3\n- dp = [0, 1, 2, 3]\n\nIteration (i = 4):\n- dp[4] = dp[3] + dp[2] = 3 + 2 = 5\n- dp = [0, 1, 2, 3, 5]\n\nIteration (i = 5):\n- dp[5] = dp[4] + dp[3] = 5 + 3 = 8\n- dp = [0, 1, 2, 3, 5, 8]\n\nLoop ends (i > n)\n\nStep 3: End\nReturn dp[5] = 8\n  <\/pre> \n  \n  <p><strong>Output:<\/strong> <code>8<\/code><\/p> \n<\/div>\n\n        <h2>Visualisation:<\/h2>\n        <img decoding=\"async\" src=\"https:\/\/namastedev.com\/blog\/wp-content\/uploads\/2025\/09\/min_climb_5.png\" alt=\"Stocks\" \/>\n   \n<\/div>\n\n\n  <div class=\"wp_blog_code-tabs-container\">\n    <div class=\"wp_blog_code-tabs-header\">\n      <button class=\"wp_blog_code-tab-button active\" data-lang=\"js\">JavaScript<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"py\">Python<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"java\">Java<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"cpp\">C++<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"c\">C<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"cs\">C#<\/button>\n    <\/div>\n\n    <div class=\"wp_blog_code-tab-content active\" data-lang=\"js\">\n      <pre><code class=\"language-javascript\">\nvar climbStairs = function(n) {\n    let dp = [0, 1, 2];\n    for (let i = 3; i <= n; i++) {\n        dp[i] = dp[i - 1] + dp[i - 2];\n    }\n    return dp[n];\n};\n<\/code><\/pre>\n    <\/div>\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"py\">\n      <pre><code class=\"language-python\">\nfrom typing import List\n\ndef minCostClimbingStairs(cost: List[int]) -> int:\n    n = len(cost)\n    dp = [0, 0]\n    for i in range(2, n + 1):\n        dp.append(min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]))\n    return dp[n]\n\n      <\/code><\/pre>\n    <\/div>\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"java\">\n      <pre><code class=\"language-java\">\nclass Solution {\n    public int minCostClimbingStairs(int[] cost) {\n        int n = cost.length;\n        int[] dp = new int[n + 1];\n        dp[0] = dp[1] = 0;\n\n        for (int i = 2; i <= n; i++) {\n            dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);\n        }\n        return dp[n];\n    }\n}\n    <\/code><\/pre>\n    <\/div>\n\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"cpp\">\n      <pre><code class=\"language-cpp\">\n<!-- #include &lt;vector&gt; -->\n#include &lt;vector&gt;\n#include &lt;algorithm&gt;\nusing namespace std;\n\nint minCostClimbingStairs(vector<int>& cost) {\n    int n = cost.size();\n    vector<int> dp(n + 1, 0);\n    dp[0] = dp[1] = 0;\n    \n    for (int i = 2; i <= n; i++) {\n        dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);\n    }\n    return dp[n];\n}\n\n<\/code><\/pre>\n    <\/div>\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"c\">\n      <pre><code class=\"language-c\">\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n\nint minCostClimbingStairs(int* cost, int n) {\n    int* dp = (int*)calloc(n + 1, sizeof(int));\n    dp[0] = dp[1] = 0;\n\n    for (int i = 2; i <= n; i++) {\n        int option1 = dp[i - 1] + cost[i - 1];\n        int option2 = dp[i - 2] + cost[i - 2];\n        dp[i] = option1 < option2 ? option1 : option2;\n    }\n    \n    int result = dp[n];\n    free(dp);\n    return result;\n}\n\n <\/code><\/pre>\n    <\/div>\n\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"cs\">\n      <pre><code class=\"language-csharp\">\nusing System;\nusing System.Collections.Generic;\n\npublic class Solution {\n    public int MinCostClimbingStairs(int[] cost) {\n        int n = cost.Length;\n        int[] dp = new int[n + 1];\n        dp[0] = dp[1] = 0;\n\n        for (int i = 2; i <= n; i++) {\n            dp[i] = Math.Min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);\n        }\n        return dp[n];\n    }\n}\n\n      <\/code><\/pre>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const buttons = document.querySelectorAll(\".wp_blog_code-tab-button\");\n  const contents = document.querySelectorAll(\".wp_blog_code-tab-content\");\n\n  buttons.forEach((button) => {\n    button.addEventListener(\"click\", () => {\n      const lang = button.getAttribute(\"data-lang\");\n\n      buttons.forEach((btn) => btn.classList.remove(\"active\"));\n      contents.forEach((content) => content.classList.remove(\"active\"));\n\n      button.classList.add(\"active\");\n      document\n        .querySelector(`.wp_blog_code-tab-content[data-lang=\"${lang}\"]`)\n        .classList.add(\"active\");\n    });\n  });\n\n  const themeToggle = document.getElementById(\"blogNotesThemeToggle\");\n  const themeContainer = document.querySelector(\".wp_blog_theme\");\n\n  themeToggle.addEventListener(\"click\", () => {\n    themeContainer.classList.toggle(\"dark-mode\");\n    themeToggle.textContent =\n      themeContainer.classList.contains(\"dark-mode\") ? \"\u2600\ufe0f\" : \"\ud83c\udf19\";\n  });\n});\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udf19 Problem Statement: 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<\/p>\n","protected":false},"author":108,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[210,322,176,175,211,811,810,174,172,173],"tags":[],"class_list":{"0":"post-10117","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-algorithms","7":"category-algorithms-and-data-structures","8":"category-csharp","9":"category-cplusplus","10":"category-data-structures","11":"category-data-structures-and-algorithms","12":"category-dsa","13":"category-java","14":"category-javascript","15":"category-python"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/posts\/10117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/users\/108"}],"replies":[{"embeddable":true,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/comments?post=10117"}],"version-history":[{"count":1,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/posts\/10117\/revisions"}],"predecessor-version":[{"id":10127,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/posts\/10117\/revisions\/10127"}],"wp:attachment":[{"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/media?parent=10117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/categories?post=10117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/tags?post=10117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}