国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【LeetCode】探索楊輝三角模型

這篇具有很好參考價值的文章主要介紹了【LeetCode】探索楊輝三角模型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學

一、題目描述

力扣原題

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學

  • 首先我們要來了解一下題目本身在說些什么,通過下方的動圖我們可以更加清楚地看到楊輝三角是怎樣一步步生成的。給到的示例中我們通過輸入楊輝三角的行數(shù),然后通過計算得到這個楊輝三角的每一行是什么具體的數(shù)值

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學

二、模型選擇

首先我們要做的第一件事就是去選擇正確的求解模型

  • 首先第一點,我們要來對比一下使用C語言求解和C++求解有什么不同,以下是題目已經(jīng)給出的函數(shù)接口

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學

  • 如果讀者有學習過 C語言的指針 和 C++的引用 的話就可以知道,C++的祖師爺為什么要發(fā)明出引用這個東西,目的就是為了脫離C語言中非常繁雜的指針

我可以試著來分析一下如何使用C語言來進行求解,首先我們來看到的是這個 返回值int**

  • 為什么要返回int**呢,原因就在于對于我們這個楊輝三角來說,雖然呈現(xiàn)的是一個三角形的樣子,但是呢其底層的實現(xiàn)其實還是一個二維數(shù)組,所以在函數(shù)內(nèi)部我們肯定要去開辟出一個二維數(shù)組,讀者可以通過下面這張圖再來回顧一下有關(guān)二級指針的知識點(忘記了可以去看看指針相關(guān)文章)

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學

  • 看完了返回值后,我們再來看看另外的兩個參數(shù),第一個是這個returnSize,其代表的是整個二維矩陣的行數(shù),而returnColumnSizes代表的則是每一行的列數(shù)。
  • 但為何它們的類型一個是一級指針int*,另一個則是二級指針int**呢?如果你有看過 二叉樹練習題之二叉樹的遍歷 的話就可以知道它們都叫做輸出型參數(shù)

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學

  • 在講解 函數(shù)棧幀 的時候我們說到過這個函數(shù)的形參是實參的一份臨時拷貝,內(nèi)部形參的改動是不會影響實參的,所以我們在做二叉樹題目的時候如果對這個參數(shù)沒有做特殊處理的話在不同的遞歸層中就會出現(xiàn) 覆蓋問題
  • 所以我們?nèi)羰窍胱屝螀?nèi)部的變化帶動外部一起修改的話,就需要外部傳遞變量的地址進來,那對于地址而言就需要使用 指針 來進行接收,一級指針的地址就需要二級指針來接收

所以就這么來看,我們?nèi)羰鞘褂肅語言來求解本題的話,就會變得很麻煩

  • 那這個時候就可以使用我們心愛的C++了??
class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        
    }
};
  • 在C++中呢,我們一般不會使用指針來模擬二維數(shù)組,而是會采取vector<vector<int>>來進行表示

三、思路分析 + 代碼詳解

接下去我們就來分析一下這道題的思路??

  • 還記得下面這個動圖嗎,仔細觀察我們可以發(fā)現(xiàn)每一行的第一個和最后一個數(shù)字都是1。而且中間空缺處的方塊都是其 左上方的數(shù)字 + 右上方的數(shù)字

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學

  • 具體地可以看以下的圖示

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學
【思路簡述】:說一下我是如何去求解這道題的

  • 首先的話我們肯定需要先去定義出一個有關(guān)vector的二維矩陣
vector<vector<int>> vv;
  • 接下去呢便要為這個二維矩陣開辟出合適的大小來容納,這里便可以使用到我們在vector中所學習的【resize】接口,既改變了size,又改變了capacity
vv.resize(numRows);
  • 因為矩陣中的每一行的第一個元素和最后一個元素都是1,所以我先去遍歷這個矩陣,將所有的值設置為0,接下去呢再固定地將每一行的第一個元素vv[i][0]和最后一個元素vv[i][i]都設置為1
for(size_t i = 0;i < vv.size(); ++i)
{
    // 首先將二維數(shù)組中的所有元素初始化為0
    vv[i].resize(i + 1, 0);
    // 然后將每一行的第一個和最后一個元素初始化為1
    vv[i][0] = vv[i][i] = 1;
}
  • 接下去呢,就要去計算每一行的具體數(shù)值了,通過兩層for循環(huán)去遍歷這個二維矩陣,接下去呢我們只對數(shù)值為0的位置進行修改,因為每行的第一列和最后一列已經(jīng)為1了,所以我們?nèi)バ薷牡闹皇侵虚g的那一部分
for(size_t i = 0;i < vv.size(); ++i)
{
    for(size_t j = 0;j < vv[i].size(); ++j)
    {
        if(vv[i][j] == 0)
        {
            // 右上方:vv[i - 1][j]
            // 左上方:vv[i - 1][j - 1]
            vv[i][j] = vv[i - 1][j] + vv[i - 1][j - 1];
        }
    }
}

對于當前的這個值就等于其上方的那一個數(shù)和上方左側(cè)的那一個數(shù)之和

vv[i][j] = vv[i - 1][j] + vv[i - 1][j - 1];

整體代碼展示:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> vv;
        vv.resize(numRows);

        for(size_t i = 0;i < vv.size(); ++i)
        {
            // 首先將二維數(shù)組中的所有元素初始化為0
            vv[i].resize(i + 1, 0);
            // 然后將每一行的第一個和最后一個元素初始化為1
            vv[i][0] = vv[i][i] = 1;
        }

        for(size_t i = 0;i < vv.size(); ++i)
        {
            for(size_t j = 0;j < vv[i].size(); ++j)
            {
                if(vv[i][j] == 0)
                {
                    // 右上方:vv[i - 1][j]
                    // 左上方:vv[i - 1][j - 1]
                    vv[i][j] = vv[i - 1][j] + vv[i - 1][j - 1];
                }
            }
        }
        return vv;
    }
};

運行結(jié)果:

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學

【LeetCode】探索楊輝三角模型,LeetCode算法筆記,leetcode,c++,數(shù)學文章來源地址http://www.zghlxwxcb.cn/news/detail-624525.html

到了這里,關(guān)于【LeetCode】探索楊輝三角模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • leetcode | 楊輝三角 | 電話號碼配對

    ? ?電話號碼的字母組合 楊輝三角? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    2024年02月22日
    瀏覽(25)
  • leetcode--楊輝三角(C、C++)

    leetcode--楊輝三角(C、C++)

    2024年02月15日
    瀏覽(19)
  • ***楊輝三角_yyds_LeetCode_python***

    ***楊輝三角_yyds_LeetCode_python***

    給定一個非負整數(shù)?numRows,生成「楊輝三角」的前?numRows?行。 在「楊輝三角」中,每個數(shù)是它左上方和右上方的數(shù)的和。 示例 1: 輸入: numRows = 5 輸出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例?2: 輸入: numRows = 1 輸出: [[1]] 來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/pasc

    2024年02月08日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】楊輝三角,相同字符的截取以及撲克牌

    【數(shù)據(jù)結(jié)構(gòu)與算法】楊輝三角,相同字符的截取以及撲克牌

    ?個人主頁:bit me ?當前專欄:數(shù)據(jù)結(jié)構(gòu) ?每日一語:不要等到了你的人生垂暮,才想起俯拾朝花,且行且珍惜。 給定一個非負整數(shù) numRows,生成「楊輝三角」的前 numRows 行。 在「楊輝三角」中,每個數(shù)是它左上方和右上方的數(shù)的和。 示例 1: 輸入: numRows = 5 輸出: [[1],[1,1

    2024年02月03日
    瀏覽(28)
  • 算法詳解:楊輝三角 | 合并倆個有序數(shù)組 | 刪除有序數(shù)組中的重復項

    算法詳解:楊輝三角 | 合并倆個有序數(shù)組 | 刪除有序數(shù)組中的重復項

    前言:本次分享題目全部來自力扣網(wǎng),大家可以自行選擇挑戰(zhàn),詳細鏈接: 118. 楊輝三角 - 力扣(LeetCode) 88. 合并兩個有序數(shù)組 - 力扣(LeetCode) 26. 刪除有序數(shù)組中的重復項 - 力扣(LeetCode) 目錄 一.楊輝三角 思路: 完整代碼: 二.合并倆個有序數(shù)組 思路: 完整代碼: 三

    2024年02月05日
    瀏覽(19)
  • 打印楊輝三角

    打印楊輝三角

    這個公式,不好算,我覺得還是楊輝三角算起來方便:c#代碼如下: ? ?double 打印楊輝三角(int n)//n必須是偶數(shù),展開項是n+1,中間項是n/2,此處返回中間項的概率202306131722 ? ? ? ? { ? ? ? ? ? ? //for (int i = 0; i n; i++) ? ? ? ? ? ? //{ ? ? ? ? ? ? // ? ?//這種方法直接算,使

    2024年02月09日
    瀏覽(25)
  • 楊輝三角(Java)

    楊輝三角(Java)

    ?實現(xiàn)思路:我們可以先把楊輝三角想象成一個空的二維數(shù)組,然后再給它賦值輸出即可。 關(guān)鍵在于如何賦值:仔細觀察上圖可以得出除了 每一行第一個數(shù)以及最后一個數(shù)(都是1) , 中間的數(shù)字規(guī)律就是: a[ i ][ j ] = a[ i - 1 ][ j - 1 ] + a[ i - 1 ][ j ] 實現(xiàn)代碼: 相信大家更多的

    2024年02月08日
    瀏覽(16)
  • 動態(tài)規(guī)劃-楊輝三角

    動態(tài)規(guī)劃-楊輝三角

    該算法題分別是: 118. 楊輝三角。 119. 楊輝三角 II 在「楊輝三角」中,每個數(shù)是它左上方和右上方的數(shù)的和。 1.2.1 示例 1: 輸入: numRows = 5 輸出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 1.2.2 示例 2: 輸入: numRows = 1 輸出: [[1]] 1.2.3 提示: 1 = numRows = 30 來源:力扣(LeetCode) 鏈接:https://

    2024年02月13日
    瀏覽(25)
  • C練習——楊輝三角

    C練習——楊輝三角

    題目: 打印近似楊輝三角,行數(shù)n自選 百度找的楊輝三角,參考一下: 解析: 把它的全部元素左對齊,就可以看成近似楊輝三角的樣子 1 1? 1 1? 2? 1 1? 3? 3? 1 1? 4? 6? 4? 1 …… ?每個數(shù)等于它上方兩數(shù)之和 每行數(shù)字左右對稱,由1開始逐漸變大 行數(shù)與列數(shù)相同,第n行有

    2024年01月17日
    瀏覽(18)
  • 每日一題,楊輝三角

    每日一題,楊輝三角

    給定一個非負整數(shù)?numRows,生成「楊輝三角」的前?numRows?行。 示例 1: 示例?2:

    2024年02月04日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包