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

算法D39 | 動(dòng)態(tài)規(guī)劃2 | 62.不同路徑 63. 不同路徑 II

這篇具有很好參考價(jià)值的文章主要介紹了算法D39 | 動(dòng)態(tài)規(guī)劃2 | 62.不同路徑 63. 不同路徑 II。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

今天開始逐漸有?dp的感覺了,題目不多,就兩個(gè)?不同路徑,可以好好研究一下

62.不同路徑?

本題大家掌握動(dòng)態(tài)規(guī)劃的方法就可以。?數(shù)論方法?有點(diǎn)非主流,很難想到。?

代碼隨想錄

視頻講解:動(dòng)態(tài)規(guī)劃中如何初始化很重要!| LeetCode:62.不同路徑_嗶哩嗶哩_bilibili

這個(gè)題看到路徑的表示,第一直覺就是一個(gè)組合數(shù)的問題,學(xué)了一下C++計(jì)算組合數(shù)防止溢出的小技巧。第二個(gè)方法再動(dòng)態(tài)規(guī)劃完成, 重點(diǎn)是把二維的動(dòng)態(tài)規(guī)劃dp[i][j]表示清楚,從左右到從上到下的順序遍歷就行。

Python數(shù)論:

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        if m==1 or n==1: return 1
        total = m + n -2
        if m>n: m, n = n, m
        nom = denom = 1
        for i in range(m-1):
            nom *= (total-i)
            denom *= (i+1)
        result = int(nom/denom)
        return result

C++數(shù)論:

C++計(jì)算組合數(shù)需要考慮溢出的問題,long long int并不能通過所有的case,那么修改數(shù)據(jù)容量就不是個(gè)完備的解決方案了。優(yōu)化的基本思路是連續(xù)m個(gè)整數(shù)相乘,一定能將m整除。

為了防止溢出,從小到大考慮,而不是從大到?。╪到n-m+1, m到1)。

另外,確保m<=n的操作下,確保了m!比 n!/(n-m)!小。

主要參考組合數(shù)的計(jì)算(對(duì)溢出處理)_long long int 放不下-CSDN博客

class Solution {
public:
    int uniquePaths(int m, int n) {
        if (m==1 || n==1) return 1;
        if (m>n) {
            int tmp = n;
            n = m;
            m = tmp;
        }
        long long sum = 1;
        for (int i=1; i<m; i++) {
            sum *= m+n-1-i;
            sum /= i;
        }
        return sum;
    }
};

Python動(dòng)態(tài)規(guī)劃:

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        if m==1 or n==1: return 1
        dp = [[0]*n for _ in range(m)]
        for i in range(1, m):
            for j in range(1, n):
                if i==1:
                    dp[i-1][j] = 1
                if j==1:
                    dp[i][j-1] = 1
                dp[i][j] = dp[i-1][j] + dp[i][j-1]
        return dp[m-1][n-1]
        

C++動(dòng)態(tài)規(guī)劃:

class Solution {
public:
    int uniquePaths(int m, int n) {
        if (m==1 || n==1) return 1;
        vector<vector<int>> dp(m, vector<int>(n, 0));
        for (int i=1; i<m; i++) {
            for (int j=1; j<n; j++) {
                if (i==1) dp[i-1][j] = 1;
                if (j==1) dp[i][j-1] = 1;
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
    }
};

63.?不同路徑?II?

https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.html

視頻講解:動(dòng)態(tài)規(guī)劃,這次遇到障礙了| LeetCode:63. 不同路徑 II_嗶哩嗶哩_bilibili

有障礙的這個(gè)變形數(shù)論就沒那么適合了,動(dòng)態(tài)規(guī)劃遍歷更合適一些。

Python:

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        m = len(obstacleGrid)
        n = len(obstacleGrid[0])
        dp = [[0]*n for _ in range(m)]
        i = j = 0
        while i<m and obstacleGrid[i][0]==0:
            dp[i][0] = 1
            i+=1
        while j<n and obstacleGrid[0][j]==0:
            dp[0][j] = 1     
            j+=1
        for i in range(1, m):
            for j in range(1, n):
                if obstacleGrid[i][j] == 0:
                    dp[i][j] = dp[i-1][j] + dp[i][j-1]
        return dp[m-1][n-1]
        

C++:

C++版本初始化dp表格時(shí),不能用while實(shí)現(xiàn),用forloop也可以提前終止,代碼更簡(jiǎn)潔一些。文章來源地址http://www.zghlxwxcb.cn/news/detail-847005.html

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();
        if (obstacleGrid[0][0]==1 || obstacleGrid[m-1][n-1]==1) return 0;
        vector<vector<int>> dp(m, vector<int>(n, 0));
        for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;
        for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;
        for (int i=1; i<m; i++) {
            for (int j=1; j<n; j++) {
                if (obstacleGrid[i][j]==0) dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
    }
};

到了這里,關(guān)于算法D39 | 動(dòng)態(tài)規(guī)劃2 | 62.不同路徑 63. 不同路徑 II的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • DAY39 62.不同路徑 + 63. 不同路徑 II

    題目要求:一個(gè)機(jī)器人位于一個(gè) m x n 網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動(dòng)一步。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為 “Finish” )。 問總共有多少條不同的路徑? 根據(jù)“機(jī)器人每次只能向下或者向右移動(dòng)一步”

    2024年02月07日
    瀏覽(25)
  • 代碼隨想錄第39天 | 62.不同路徑 、 63. 不同路徑 II

    代碼隨想錄第39天 | 62.不同路徑 、 63. 不同路徑 II

    一、前言 參考文獻(xiàn):代碼隨想錄 今天主要的題目是動(dòng)態(tài)規(guī)劃的路徑問題,動(dòng)態(tài)規(guī)劃五要點(diǎn); 1、確定dp數(shù)組,dp[i]代表什么i代表什么; 2、遞推公式; 3、初始化dp數(shù)組; 4、遍歷順序; 5、打印dp數(shù)組; 二、不同路徑 1、思路: 我感覺動(dòng)態(tài)規(guī)劃,我聽的很認(rèn)真,然后這個(gè)題目,

    2024年04月13日
    瀏覽(57)
  • 我在代碼隨想錄|寫代碼Day33 | 動(dòng)態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分

    我在代碼隨想錄|寫代碼Day33 | 動(dòng)態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分

    ??博客介紹`: 27dCnc ??系列專欄: 數(shù)據(jù)結(jié)構(gòu)與算法 算法入門 C++項(xiàng)目 ?? 當(dāng)前專欄: 算法入門 專題 : 數(shù)據(jù)結(jié)構(gòu)幫助小白快速入門算法 ???????????????????????? ☆*: .?. o(≧▽≦)o .?.:*☆ ??感謝大家點(diǎn)贊??收藏?評(píng)論?? 今日學(xué)習(xí)打卡 代碼隨想錄 - 動(dòng)態(tài)規(guī)劃

    2024年03月11日
    瀏覽(96)
  • 算法隨想錄第三十九天打卡|62.不同路徑 , 63. 不同路徑 II

    本題大家掌握動(dòng)態(tài)規(guī)劃的方法就可以。?數(shù)論方法?有點(diǎn)非主流,很難想到。? 代碼隨想錄 視頻講解: 動(dòng)態(tài)規(guī)劃中如何初始化很重要!| LeetCode:62.不同路徑_嗶哩嗶哩_bilibili 總結(jié) 把m和n弄反了。 https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://programmercarl.com/00

    2024年01月20日
    瀏覽(37)
  • 力扣算法刷題Day39|動(dòng)態(tài)規(guī)劃:不同路徑 I&II

    力扣題目:#62.不同路徑 刷題時(shí)長(zhǎng):參考題解后10min 解題方法:動(dòng)規(guī) 復(fù)雜度分析 時(shí)間O(m*n) 空間O(m*n) 問題總結(jié) 初始化二維數(shù)組的python語法:i 對(duì)應(yīng) m,j 對(duì)應(yīng)n 二維遍歷順序,從上到下從左到右通過兩層for循環(huán)實(shí)現(xiàn),其中startindex應(yīng)為1 本題收獲 動(dòng)規(guī)思路 確定dp數(shù)組及下標(biāo)的含義

    2024年02月12日
    瀏覽(19)
  • 算法刷刷刷|動(dòng)態(tài)規(guī)劃篇|509.斐波那契數(shù)| 70.爬樓梯| 746.使用最小花費(fèi)爬樓梯| 62.不同路徑| 63不同路徑2| 343.正數(shù)拆分 | 96.不同的二叉搜索樹

    509. 斐波那契數(shù) 斐波那契數(shù) (通常用 F(n) 表示)形成的序列稱為 斐波那契數(shù)列 。該數(shù)列由 0 和 1 開始,后面的每一項(xiàng)數(shù)字都是前面兩項(xiàng)數(shù)字的和。也就是: F(0) = 0,F(xiàn)(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n 1 給定 n ,請(qǐng)計(jì)算 F(n) 。 70.爬樓梯 746.使用最小花費(fèi)爬樓梯 給你一個(gè)整數(shù)

    2023年04月23日
    瀏覽(24)
  • 力扣:63. 不同路徑 II(動(dòng)態(tài)規(guī)劃)

    力扣:63. 不同路徑 II(動(dòng)態(tài)規(guī)劃)

    一個(gè)機(jī)器人位于一個(gè) m x n 網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動(dòng)一步。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為 “Finish”)。 現(xiàn)在考慮網(wǎng)格中有障礙物。那么從左上角到右下角將會(huì)有多少條不同的路徑? 網(wǎng)格中的障礙

    2024年01月18日
    瀏覽(24)
  • leetcode63. 不同路徑 II(動(dòng)態(tài)規(guī)劃-java)

    leetcode63. 不同路徑 II(動(dòng)態(tài)規(guī)劃-java)

    來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/unique-paths-ii 一個(gè)機(jī)器人位于一個(gè) m x n 網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動(dòng)一步。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為 “Finish”)。 現(xiàn)在考慮網(wǎng)格中有障礙物。

    2024年02月11日
    瀏覽(24)
  • 代碼隨想錄Day33 LeetCode T62不同路徑 LeetCode T63 不同路徑II

    代碼隨想錄Day33 LeetCode T62不同路徑 LeetCode T63 不同路徑II

    動(dòng)規(guī)五部曲 1.確定dp數(shù)組含義 2.確定遞推公式 3.初始化數(shù)組 4.確定遍歷方式 5.打印dp數(shù)組查看分析問題 題目鏈接:62. 不同路徑 - 力扣(LeetCode) 注:n行m列而不是m行n列 1.確定dp數(shù)組含義 代表到達(dá)此下標(biāo)有多少條路徑 2.確定遞推公式 因?yàn)橹荒芟蛴一蛘呦蛳伦?所以到達(dá)i,j這個(gè)點(diǎn)的

    2024年02月06日
    瀏覽(27)
  • 【算法|動(dòng)態(tài)規(guī)劃No.6】leetcode63. 不同路徑Ⅱ

    【算法|動(dòng)態(tài)規(guī)劃No.6】leetcode63. 不同路徑Ⅱ

    個(gè)人主頁:平行線也會(huì)相交 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會(huì)相交 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時(shí),記錄一下自己的學(xué)習(xí)過程,希望對(duì)大家有所幫助 ??希望我們一起努力、成長(zhǎng),共同進(jìn)步。

    2024年02月16日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包