算法-每日一題(DAY9)楊輝三角

1.題目鏈接:

118. 楊輝三角 - 力扣(LeetCode)

2.題目描述:

給定一個非負整數?numRows生成「楊輝三角」的前?numRows?行。

在「楊輝三角」中,每個數是它左上方和右上方的數的和。

示例 1:

輸入: numRows = 5
輸出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例?2:

輸入: numRows = 1
輸出: [[1]]

提示:

1 <= numRows <= 30

3.解題思路:

這段代碼采用了動態規劃的思路,通過構建二維數組來生成楊輝三角。首先,創建一個大小為 numRows 的二維數組 res,用來存儲每一行的數字。在每一行的開始,調整每一行的大小為 i+1(其中 i 是行號),并將每一行的第一個和最后一個元素設置為 1,這是楊輝三角的邊界條件。接著,從第三行開始,通過嵌套的循環填充每行的內部元素。每個內部元素的值等于上一行相鄰兩個元素之和,即 res[i][j] = res[i-1][j-1] + res[i-1][j]。這種方式逐步計算出每行的所有元素,最終生成完整的楊輝三角,并返回整個數組。

數學原理:組合恒等式 C(n,k)=C(n?1,k?1)+C(n?1,k)

4.題解代碼:

class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> res(numRows);// 創建一個二維 vector,大小為 numRows,表示楊輝三角的行數for (int i = 0; i < res.size(); i++) // 遍歷每一行{res[i].resize(i + 1, 0);// 調整每一行的大小為 i+1,并初始化所有元素為 0vres[i][0] = res[i][i] = 1;// 將每一行的第一個元素和最后一個元素設置為 1// 這是楊輝三角的邊界條件:每行的第一個和最后一個數都是 1}for (int i = 2; i < res.size(); i++) //從第三行開始填充楊輝三角的內部元素{// 填充每行的內部元素,由上面兩行的相鄰元素相加得到for (int j = 1; j < i; j++){res[i][j] = res[i - 1][j - 1] + res[i - 1][j];// 當前元素等于上一行的相鄰兩個元素之和}}return res;}
};

5.示例演算:

當numrows = 4時

步驟操作結果
初始化創建4行空vector[ ], [ ], [ ], [ ]
邊界設置設置首尾為1[1], [1,1], [1, ,1], [1, , ,1]
計算第2行res[2][1]=res[1][0]+res[1][1][1], [1,1], [1,2,1], [1, , ,1]
計算第3行res[3][1]=res[2][0]+res[2][1]
res[3][2]=res[2][1]+res[2][2]
[1], [1,1], [1,2,1], [1,3,3,1]

6.復雜度計算:

時間復雜度:其中n為行數。需填充n(n+1)/2?個元素,故時間復雜度為O(n^2)

空間復雜度:用了一個二維 vector 數組 res 來存儲整個楊輝三角,故空間復雜度為O(n^2)

7.拓展:

遞歸解法:

class Solution {
public:vector<vector<int>> generate(int numRows) {if (numRows == 1) return {{1}};vector<vector<int>> prev = generate(numRows - 1);vector<int> newRow(numRows, 1);for (int j = 1; j < numRows - 1; j++) {newRow[j] = prev.back()[j - 1] + prev.back()[j];}prev.push_back(newRow);return prev;}
};

?時間復雜度:O(n^2)

?空間復雜度:O(n^2)

數學解法:

class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> res;for (int i = 0; i < numRows; i++) {vector<int> row;for (int j = 0; j <= i; j++) {row.push_back(combination(i, j)); // 計算組合數C(i,j)}res.push_back(row);}return res;}private:int combination(int n, int k) {long res = 1; // 避免乘法溢出for (int i = 1; i <= k; i++) {res = res * (n - i + 1) / i; // 遞推公式}return (int)res;}
};

?時間復雜度:O(n^3)

?空間復雜度:O(n^2)

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/bicheng/86010.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86010.shtml
    英文地址,請注明出處:http://en.pswp.cn/bicheng/86010.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    【MATLAB代碼】制導方法介紹與例程——追蹤法,適用于二維平面,目標是移動的|附完整源代碼

    追蹤法(追蹤導引法)是一種常見的導彈導引方式,其基本原理是保持導彈的速度矢量始終指向目標。在追蹤法中,導彈的加速度可以表示為指向目標的加速度。 本文給出二維平面下,移動目標的追蹤法導引的介紹、公式與matlab例程 訂閱專欄后,可以直接查看完整源代碼 文章目錄 運行…

    小白的進階之路系列之十八----人工智能從初步到精通pytorch綜合運用的講解第十一部分

    從零開始的NLP:使用序列到序列網絡和注意力機制進行翻譯 我們將編寫自己的類和函數來預處理數據以完成我們的 NLP 建模任務。 在這個項目中,我們將訓練一個神經網絡將法語翻譯成英語。 [KEY: > input, = target, < output]> il est en train de peindre un table…

    SSL安全證書:數字時代的網絡安全基石

    SSL安全證書&#xff1a;數字時代的網絡安全基石 在當今數字化浪潮中&#xff0c;網絡通信安全已成為個人、企業和組織不可忽視的核心議題。SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接層&#xff09;安全證書作為保障數據傳輸安全的關鍵技術&#xff0c;通過加…

    LLM-201: OpenHands與LLM交互鏈路分析

    一、核心交互鏈路架構 #mermaid-svg-ZBqCSQk1PPDkIXNx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-icon{fill:#552222;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-text{fill:#552222;strok…

    【項目】仿muduo庫one thread one loop式并發服務器SERVER模塊(下)

    &#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f152; C 語言 | &#x1f310; 計算機網絡 |&#x1f5c3;? mysql 項目文章&#xff1a; 仿muduo庫one thread one loop式并發服務器…

    數據庫索引結構 B 樹、B + 樹與哈希索引在不同數據查詢場景下的適用性分析

    一、數據庫索引結構B樹 樹概述 樹是一種多路平衡查找樹&#xff0c;廣泛應用于數據庫和文件系統中。B樹的節點可以存儲多個數據元素&#xff0c;并且保持樹的平衡&#xff0c;以提高查詢效率。 適用性分析 在數據量較大&#xff0c;范圍查找較多的場景下&#xff0c;B樹的查詢效…

    Linux進程間通信——信號

    1.信號的介紹 信號( Signal )是 Unix, 類Unix以及其他POSIX兼容的操作系統中進程間通信的一種有限制的手段。 1&#xff09;信號是在軟件層面上對中斷機制的一種模擬&#xff0c;是一種異步通信方式。2&#xff09;信號可以直接進行用戶空間進程和內核進程之間的交互&#xff…

    Bytemd@Bytemd/react詳解(編輯器實現基礎AST、插件、跨框架)

    ByteMD Markdown編輯器詳細解釋&修改編輯器默認樣式&#xff08;高度300px) AST樹詳解 [ByteMD 插件系統詳解(https://blog.csdn.net/m0_55049655/article/details/148811248?spm1001.2014.3001.5501) Sevelet編寫的Bytemd如何適配到React中 ??1?? 背景概述 Byte…

    《Redis》事務

    文章目錄 Redis中的原子性Redis的事物和MySQL事務的區別Redis實現事務什么場景下&#xff0c;會使用事務? Redis事務相關命令watch命令的實現原理 總結 Redis中的原子性 Redis的原子性不同于MySQL的原子性。 Redis的事物和MySQL事務的區別 但是注意體會Redis的事務和MySQL…

    Elasticsearch Kibana (一)

    一、官方文檔 elasticsearch官網&#xff1a;elasticsearch官網 elasticsearch源碼&#xff1a;elasticsearch源碼 ik分詞器&#xff1a; ik分詞器 ik分詞器下載&#xff1a;ik分詞器下載 elasticsearch 版本選擇&#xff1a;elasticsearch 版本選擇 官方推薦Elasticsearch和j…

    [linux] Ubuntu 24軟件下載和安裝匯總(自用)

    經常重裝系統&#xff0c;備份下&#xff0c;有用的也可以參考。 安裝圖形界面 apt install ubuntu-desktop systemctl set-default graphical.target reboot 安裝chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo apt insta…

    分布變化的模仿學習算法

    與傳統監督學習不同,直接模仿學習在不同時刻所面臨的數據分布可能不同.試設計一個考慮不同時刻數據分布變化的模仿學習算法 import numpy as np import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset from…

    arm-none-eabi-ld: cannot find -lm

    arm-none-eabi-ld -Tuser/hc32l13x.lds -o grbl_hc32l13x.elf user/interrupts_hc32l13x.o user/system_hc32l13x.o user/main.o user/startup_hc32l13x.o -lm -Mapgrbl_hc32l13x.map arm-none-eabi-ld: cannot find -lm makefile:33: recipe for target link failed 改為在gcc…

    【Python辦公】Excel文件批量樣式修改器

    目錄 專欄導讀1. 背景介紹2. 項目概述3. 庫的安裝4. 核心架構設計① 類結構設計② 數據模型1) 文件管理2) 樣式配置5. 界面設計與實現① 布局結構② 動態組件生成6. 核心功能實現① 文件選擇與管理② 顏色選擇功能③ Excel文件處理核心邏輯完整代碼結尾專欄導讀 ?? 歡迎來到P…

    QT的一些介紹

    //雖然下面一行代碼進行widget和ui的窗口關聯&#xff0c;但是如果發生窗口大小變化的時候&#xff0c;里面的布局不會隨之變化ui->setupUi(this);//通過下面這行代碼進行顯示說明&#xff0c;讓窗口變化時&#xff0c;布局及其子控件隨之變化this->setLayout(ui->ver…

    RISC-V向量擴展與GPU協處理:開源加速器設計新范式——對比NVDLA與香山架構的指令集融合方案

    點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生專屬優惠 當開源指令集遇上異構計算&#xff0c;RISC-V向量擴展&#xff08;RVV&#xff09;正重塑加速…

    自動恢復網絡路由配置的安全腳本說明

    背景 兩個文章 看了就明白 Ubuntu 多網卡路由配置筆記&#xff08;內網 外網同時通 可能有問題&#xff0c;以防萬一可以按照個來恢復 sudo ip route replace 192.168.1.0/24 dev eno8403 proto kernel scope link src <你的IP>或者恢復腳本! 如下 誤操作路由時&…

    創建 Vue 3.0 項目的兩種方法對比:npm init vue@latest vs npm init vite@latest

    創建 Vue 3.0 項目的兩種方法對比&#xff1a;npm init vuelatest vs npm init vitelatest Vue 3.0 作為當前主流的前端框架&#xff0c;官方提供了多種項目創建方式。本文將詳細介紹兩種最常用的創建方法&#xff1a;Vue CLI 方式 (npm init vuelatest) 和 Vite 方式 (npm in…

    Java求職者面試指南:Spring, Spring Boot, Spring MVC, MyBatis技術點深度解析

    Java求職者面試指南&#xff1a;Spring, Spring Boot, Spring MVC, MyBatis技術點深度解析 面試官與程序員JY的三輪提問 第一輪&#xff1a;基礎概念問題 1. 請解釋一下Spring框架的核心容器是什么&#xff1f;它有哪些主要功能&#xff1f; JY回答&#xff1a;Spring框架的…

    【修復MySQL 主從Last_Errno:1051報錯的幾種解決方案】

    當MySQL主從集群遇到Last_Errno:1051報錯后不要著急&#xff0c;主要有三種解決方案&#xff1a; 方案1: 使用GTID場景&#xff1a; mysql> STOP SLAVE;(2)設置事務號&#xff0c;事務號從Retrieved_Gtid_Set獲取 在session里設置gtid_next&#xff0c;即跳過這個GTID …