第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

LeetCode 唯一路徑問(wèn)題得到錯(cuò)誤的答案

LeetCode 唯一路徑問(wèn)題得到錯(cuò)誤的答案

人到中年有點(diǎn)甜 2023-05-10 13:20:17
我正在一個(gè)名為 leetcode 的網(wǎng)站上做這個(gè)名為“唯一路徑”的問(wèn)題。問(wèn)題是:給定一個(gè)包含 1 和 0 的二維矩陣,機(jī)器人從左上角開(kāi)始,想要到達(dá)右下角。機(jī)器人只有 2 個(gè)動(dòng)作:向右和向下。此外,還有障礙(由“1”表示)。機(jī)器人不能跨過(guò)障礙物。當(dāng)我輸入時(shí),我的程序給出了錯(cuò)誤的答案:0000010000000000應(yīng)該輸出 7,因?yàn)閺淖笊辖堑姆綁K到右下角的方塊有 7 條路徑。我的程序輸出 2。我的猜測(cè)是,它只會(huì)一直向下并一直向右,一直向右并一直向下。但是,我不知道這種行為的原因,因?yàn)樗鼘?duì)我來(lái)說(shuō)看起來(lái)很好。誰(shuí)能告訴我為什么要這樣做?這是代碼:class Solution {    int[][] check;    public int uniquePathsWithObstacles(int[][] grid) {        if(grid == null || grid.length == 0)            return 0;        check = new int[grid.length][grid[0].length];        return uniquePaths(grid, 0, 0);    }    private int uniquePaths(int[][] grid, int x, int y){        if(x >= grid[0].length || y >= grid.length || grid[y][x] == 1)            return 0;        else if(x == grid[0].length - 1 && y == grid.length - 1)            return 1;        else if(check[y][x] > 0)            return check[y][x];        return grid[y][x] = uniquePaths(grid, x + 1, y) + uniquePaths(grid, x, y + 1);    }}
查看完整描述

1 回答

?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

對(duì)于不需要遞歸的“更好”實(shí)現(xiàn),請(qǐng)從右下方開(kāi)始。


如果你這樣做,你只需要記住一行(或一列),所以它既更快又需要更少的內(nèi)存。


例子


讓我們使用這樣的網(wǎng)格。為了不與下面的路徑計(jì)數(shù)數(shù)組混淆,使用符號(hào)而不是數(shù)字來(lái)定義網(wǎng)格。


. . . . .

. * * . .

. . . . .

. . . . .

現(xiàn)在為最后一行構(gòu)建一個(gè)數(shù)組,其中有多少種方法可以從那里退出。


. . . . .   last row from grid

=========

1 1 1 1 1   pathCount from each cell to the end

對(duì)其上方的行重復(fù)該操作。從右開(kāi)始計(jì)算,pathCount為向右走時(shí)的pathCount + 向下走時(shí)的pathCount。


. . . . .   3rd row from grid

1 1 1 1 1   result from last row

=========

5 4 3 2 1   result for 3rd row

因?yàn)橥瓿珊笪覀儾辉傩枰詈笠恍械闹担晕覀兛梢灾赜脭?shù)組并替換內(nèi)聯(lián)值。


再重復(fù)一次。這次我們屏蔽了單元格,因此將這些單元格的 pathCount 設(shè)置為 0。


. * * . .   2nd row from grid

5 4 3 2 1   result from 3rd row

=========

5 0 0 3 1   result for 2nd row

最后:


. . . . .   1st row from grid

5 0 0 3 1   result from 2nd row

=========

9 4 4 4 1   result for 1st row

最終結(jié)果:從左上角到右下角的 9 條獨(dú)特路徑。


使用網(wǎng)格的替代格式的緊湊實(shí)現(xiàn),以便于測(cè)試:


static int countPaths(String... grid) {

    int[] paths = new int[grid[0].length() + 1];

    paths[grid[0].length() - 1] = 1;

    for (int y = grid.length - 1; y >= 0; y--)

        for (int x = grid[0].length() - 1; x >= 0; x--)

            paths[x] = (grid[y].charAt(x) != '0' ? 0 : paths[x] + paths[x + 1]);

    return paths[0];

}

測(cè)試


System.out.println(countPaths("00000",

                              "01100",

                              "00000",

                              "00000")); // prints: 9

System.out.println(countPaths("000",

                              "000",

                              "000")); // prints: 6


查看完整回答
反對(duì) 回復(fù) 2023-05-10
  • 1 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)