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

算法leetcode|63. 不同路徑 II(rust重拳出擊)

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



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”)。

現(xiàn)在考慮網(wǎng)格中有障礙物。那么從左上角到右下角將會(huì)有多少條不同的路徑?

網(wǎng)格中的障礙物和空位置分別用 10 來(lái)表示。

樣例 1:

算法leetcode|63. 不同路徑 II(rust重拳出擊),LeetCode力扣算法題目,rust,golang,數(shù)據(jù)結(jié)構(gòu),算法,后端

輸入:
	
	obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
	
輸出:
	
	2
	
解釋:

	3x3 網(wǎng)格的正中間有一個(gè)障礙物。
	從左上角到右下角一共有 2 條不同的路徑:
	1. 向右 -> 向右 -> 向下 -> 向下
	2. 向下 -> 向下 -> 向右 -> 向右

樣例 2:

算法leetcode|63. 不同路徑 II(rust重拳出擊),LeetCode力扣算法題目,rust,golang,數(shù)據(jù)結(jié)構(gòu),算法,后端

輸入:
	
	obstacleGrid = [[0,1],[0,0]]
	
輸出:
	
	1

提示:

  • m == obstacleGrid.length
  • n == obstacleGrid[i].length
  • 1 <= m, n <= 100
  • obstacleGrid[i][j] 為 0 或 1

分析:

  • 面對(duì)這道算法題目,二當(dāng)家的再次陷入了沉思。
  • 這道題和62. 不同路徑 類似,但是由于有隨機(jī)位置的障礙物,所以就不能直接用數(shù)學(xué)的組合數(shù)方式求解了。
  • 那么動(dòng)態(tài)規(guī)劃成了此時(shí)的優(yōu)選。每一個(gè)點(diǎn)的不同路徑數(shù)是到達(dá)上面點(diǎn)的不同路徑數(shù)與到達(dá)左面不同路徑數(shù)的和。我們可以按行從上到下的方式處理(按列從左到右處理也是可以的,但是有些別扭,因?yàn)槎S數(shù)組的第一維是行,第二維是列,習(xí)慣上都是按行處理),這樣會(huì)發(fā)現(xiàn)每行只和上一行的結(jié)果有關(guān)系,所以就不需要 m * n 的額外空間,而只需要 m 的空間,即滾動(dòng)數(shù)組的思想。

題解:

rust:

impl Solution {
    pub fn unique_paths_with_obstacles(obstacle_grid: Vec<Vec<i32>>) -> i32 {
        let rows = obstacle_grid.len();
        let cols = obstacle_grid[0].len();
        let mut dp = vec![0; cols];

        if obstacle_grid[0][0] == 0 {
            dp[0] = 1;
        }

        (0..rows).for_each(|r| {
            (0..cols).for_each(|c| {
                if obstacle_grid[r][c] == 1 {
                    dp[c] = 0;
                } else if c > 0 && obstacle_grid[r][c - 1] == 0 {
                    dp[c] += dp[c - 1];
                }
            });
        });

        return dp[cols - 1];
    }
}

go:

func uniquePathsWithObstacles(obstacleGrid [][]int) int {
    rows, cols := len(obstacleGrid), len(obstacleGrid[0])
	dp := make([]int, cols)

	if obstacleGrid[0][0] == 0 {
		dp[0] = 1
	}

	for r := 0; r < rows; r++ {
		for c := 0; c < cols; c++ {
			if obstacleGrid[r][c] == 1 {
				dp[c] = 0
				continue
			}
			if c > 0 && obstacleGrid[r][c-1] == 0 {
				dp[c] += dp[c-1]
			}
		}
	}

	return dp[cols-1]
}

c++:

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        const int rows = obstacleGrid.size(), cols = obstacleGrid.at(0).size();
        vector<int> dp(cols);

        dp[0] = (obstacleGrid[0][0] == 0);
        for (int r = 0; r < rows; ++r) {
            for (int c = 0; c < cols; ++c) {
                if (obstacleGrid[r][c] == 1) {
                    dp[c] = 0;
                    continue;
                }
                if (c > 0 && obstacleGrid[r][c - 1] == 0) {
                    dp[c] += dp[c - 1];
                }
            }
        }

        return dp.back();
    }
};

python:

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        rows, cols = len(obstacleGrid), len(obstacleGrid[0])
        dp = [0] * cols
        if obstacleGrid[0][0] == 0:
            dp[0] = 1
        for r in range(rows):
            for c in range(cols):
                if obstacleGrid[r][c] == 1:
                    dp[c] = 0
                    continue
                if c > 0 and obstacleGrid[r][c - 1] == 0:
                    dp[c] += dp[c - 1]
        return dp[cols - 1]


java:

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        final int   rows = obstacleGrid.length, cols = obstacleGrid[0].length;
        final int[] dp   = new int[cols];

        if (obstacleGrid[0][0] == 0) {
            dp[0] = 1;
        }

        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                if (obstacleGrid[i][j] == 1) {
                    dp[j] = 0;
                    continue;
                }
                if (j > 0 && obstacleGrid[i][j - 1] == 0) {
                    dp[j] += dp[j - 1];
                }
            }
        }

        return dp[cols - 1];
    }
}

非常感謝你閱讀本文~
歡迎【點(diǎn)贊】【收藏】【評(píng)論】三連走一波~
放棄不難,但堅(jiān)持一定很酷~
希望我們大家都能每天進(jìn)步一點(diǎn)點(diǎn)~
本文由 二當(dāng)家的白帽子:https://le-yi.blog.csdn.net/ 博客原創(chuàng)~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-596658.html


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

本文來(lái)自互聯(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)文章

  • 算法leetcode|47. 全排列 II(rust重拳出擊)

    給定一個(gè)可包含重復(fù)數(shù)字的序列 nums , 按任意順序 返回所有不重復(fù)的全排列。 1 = nums.length = 8 -10 = nums[i] = 10 面對(duì)這道算法題目,二當(dāng)家的再次陷入了沉思。 要做全排列,就用遞歸套娃大法,回溯是大方向。 有重復(fù)的數(shù)字,又要不重復(fù)的排列,去重也是必須的了,最慢的方

    2023年04月26日
    瀏覽(25)
  • 算法leetcode|92. 反轉(zhuǎn)鏈表 II(rust重拳出擊)

    算法leetcode|92. 反轉(zhuǎn)鏈表 II(rust重拳出擊)

    給你單鏈表的頭指針 head 和兩個(gè)整數(shù) left 和 right ,其中 left = right 。請(qǐng)你反轉(zhuǎn)從位置 left 到位置 right 的鏈表節(jié)點(diǎn),返回 反轉(zhuǎn)后的鏈表 。 鏈表中節(jié)點(diǎn)數(shù)目為 n 1 = n = 500 -500 = Node.val = 500 1 = left = right = n 你可以使用一趟掃描完成反轉(zhuǎn)嗎? 將鏈表分成3部分,即前面不需要反轉(zhuǎn)的部

    2024年02月05日
    瀏覽(28)
  • 算法leetcode|71. 簡(jiǎn)化路徑(rust重拳出擊)

    給你一個(gè)字符串 path ,表示指向某一文件或目錄的 Unix 風(fēng)格 絕對(duì)路徑 (以 \\\'/\\\' 開(kāi)頭),請(qǐng)你將其轉(zhuǎn)化為更加簡(jiǎn)潔的規(guī)范路徑。 在 Unix 風(fēng)格的文件系統(tǒng)中,一個(gè)點(diǎn)( . )表示當(dāng)前目錄本身;此外,兩個(gè)點(diǎn) ( .. ) 表示將目錄切換到上一級(jí)(指向父目錄);兩者都可以是復(fù)雜相

    2024年02月12日
    瀏覽(19)
  • 算法leetcode|81. 搜索旋轉(zhuǎn)排序數(shù)組 II(rust重拳出擊)

    算法leetcode|81. 搜索旋轉(zhuǎn)排序數(shù)組 II(rust重拳出擊)

    已知存在一個(gè)按非降序排列的整數(shù)數(shù)組 nums ,數(shù)組中的值不必互不相同。 在傳遞給函數(shù)之前, nums 在預(yù)先未知的某個(gè)下標(biāo) k ( 0 = k nums.length )上進(jìn)行了 旋轉(zhuǎn) ,使數(shù)組變?yōu)?[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] (下標(biāo) 從 0 開(kāi)始 計(jì)數(shù))。例如, [0,1,2,4,4,4,5,6,

    2024年02月07日
    瀏覽(22)
  • 算法leetcode|64. 最小路徑和(rust重拳出擊)

    算法leetcode|64. 最小路徑和(rust重拳出擊)

    給定一個(gè)包含非負(fù)整數(shù)的 m x n 網(wǎng)格 grid ,請(qǐng)找出一條從左上角到右下角的路徑,使得路徑上的數(shù)字總和為最小。 說(shuō)明 :每次只能向下或者向右移動(dòng)一步。 m == grid.length n == grid[i].length 1 = m, n = 200 0 = grid[i][j] = 200 面對(duì)這道算法題目,二當(dāng)家的再次陷入了沉思。 這道題和62. 不同

    2024年02月15日
    瀏覽(26)
  • 算法leetcode|80. 刪除有序數(shù)組中的重復(fù)項(xiàng) II(rust重拳出擊)

    給你一個(gè)有序數(shù)組 nums ,請(qǐng)你 原地 刪除重復(fù)出現(xiàn)的元素,使得出現(xiàn)次數(shù)超過(guò)兩次的元素只出現(xiàn)兩次 ,返回刪除后數(shù)組的新長(zhǎng)度。 不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成。 說(shuō)明 : 為什么返回?cái)?shù)值是整數(shù),但輸出的答案是

    2024年02月09日
    瀏覽(33)
  • 算法leetcode|82. 刪除排序鏈表中的重復(fù)元素 II(rust重拳出擊)

    算法leetcode|82. 刪除排序鏈表中的重復(fù)元素 II(rust重拳出擊)

    給定一個(gè)已排序的鏈表的頭 head , 刪除原始鏈表中所有重復(fù)數(shù)字的節(jié)點(diǎn),只留下不同的數(shù)字 。返回 已排序的鏈表 。 鏈表中節(jié)點(diǎn)數(shù)目在范圍 [0, 300] 內(nèi) -100 = Node.val = 100 題目數(shù)據(jù)保證鏈表已經(jīng)按升序 排列 面對(duì)這道算法題目,二當(dāng)家的再次陷入了沉思。 這道題目和 83. 刪除排序

    2024年02月08日
    瀏覽(26)
  • LeetCode算法題解(動(dòng)態(tài)規(guī)劃)|LeetCoed62. 不同路徑、LeetCode63. 不同路徑 II

    LeetCode算法題解(動(dòng)態(tài)規(guī)劃)|LeetCoed62. 不同路徑、LeetCode63. 不同路徑 II

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

    2024年02月05日
    瀏覽(33)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】63、LeetCode不同路徑 II

    【算法與數(shù)據(jù)結(jié)構(gòu)】63、LeetCode不同路徑 II

    所有的LeetCode題解索引,可以看這篇文章——【算法和數(shù)據(jù)結(jié)構(gòu)】LeetCode題解。 ?? 思路分析 :參考【算法與數(shù)據(jù)結(jié)構(gòu)】62、LeetCode不同路徑的題目,可以發(fā)現(xiàn)本題僅僅是多了障礙物。我們還是用動(dòng)態(tài)規(guī)劃來(lái)做。有障礙物的地方無(wú)法到達(dá),因此路徑數(shù)量為0,只需要將障礙物位

    2024年02月02日
    瀏覽(21)
  • 算法leetcode|66. 加一(rust重拳出擊)

    給定一個(gè)由 整數(shù) 組成的 非空 數(shù)組所表示的非負(fù)整數(shù),在該數(shù)的基礎(chǔ)上加一。 最高位數(shù)字存放在數(shù)組的首位, 數(shù)組中每個(gè)元素只存儲(chǔ) 單個(gè) 數(shù)字。 你可以假設(shè)除了整數(shù) 0 之外,這個(gè)整數(shù)不會(huì)以零開(kāi)頭。 1 = digits.length = 100 0 = digits[i] = 9 面對(duì)這道算法題目,二當(dāng)家的再次陷入了

    2024年02月14日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包