因為它,差點無緣大廠夢!!!

2022-03-17 13:44:13 字數 2556 閱讀 3059

畫外音:後來,在小公尺的面試環節中也遇到了此題。

那麼,今天小萊就給大家分享下這道動態規劃題。 

題目:

乙個機械人位於乙個 m × n 網格的左上角(起始點在下圖中標記為「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。

問總共有多少條不同的路徑?

說明:m 和 n 的值均不超過 100。

例如,上圖是乙個7 × 3 的網格。有多少可能的路徑?

畫外音:leetcode第62題,中等/難度。

我們由終點位置倒推,從圖中可以看出,想要到達終點,a、b兩點是必經之路。那麼,我們想要得到起點到終點的路徑數,計算出到達a、b兩點的路徑總數不就能夠得出來了嗎?但是a、b兩點的路徑數如何得出呢。

我們不妨再往前推,到達a點需要經過c或者d這兩點,到達a點的路徑數可以通過到達c、d兩點的路徑總數得知。

同樣地,到達b點需要經過d點或e點,到達b點的路徑數可以通過到達d、e兩點的路徑總數得知。

到這,聰明的你有沒有發現規律:

每乙個點可到達路徑數= 其相鄰左邊點可到達路徑數 + 其相鄰上邊點可到達路徑數

現在,我們可以回到起點了。 

我們可以把m×n方格看作乙個二維陣列,陣列中的每個元素表示:

起點到該方格的路徑數

起點到該方格的路徑數

起點到該方格的路徑數

(默念三遍!!!)

如下圖中,機械人到達第x行(僅第0行)或第y列(僅第0列)中的任意方格都只有一條路徑。因此,我們將第x行、第y列的方格元素都置為1。 

接著,我們繼續向其它點走。現在分別經過路徑

一、路徑二走到了s點,因此到達s點的路徑有2條。

最終,我們得到這樣一張網格,每個格仔裡記錄了起點到該格的路徑數。 

但是如何用**表示呢?上邊提到,我們可以將其看作乙個二維陣列v[m][n]。初始時,將第0行、第0列賦值為1。通過雙層迴圈,將目標點的上邊元素與左邊元素相加,即可得到當前路徑數。

**實現:

int uniquepaths(int m, int n)

int i, j;

int v[m][n];

for (i = 1; i 

}return v[m-1][n-1];

}

畫外音:本文使用c語言實現,但是不會涉及複雜的語言特性,所以無需擔心看不懂。另外,**實現小萊在leetcode親測!!!

進行到這裡,我們就實現了機械人從起點到終點暢通無阻情況下所要走的路徑。 

你可能注意到了,小萊重點標記了下『暢通無阻』這4個字,這說明還有存在障礙物的情況。那麼現在我們就來看看,存在障礙物的情況下,機械人所走的路徑數有多少。

畫外音:此題為leetcode第63題,中等/難度。

如圖中,給定乙個二維陣列obstaclegrid[m][n],用1來表示障礙物,用0表示空位置。

同樣地,我們還是用二維陣列v[m][n]來表示機械人到達某個方格的路徑數。

但是在處理時,與無障礙物不同的是,其不再是簡單向右或向下移動。初始化和計算時要考慮障礙。

這裡分為兩種情況:

1、當障礙物出現在第0行或第0列,此時一旦遇到障礙,後續方格無法到達,因此後續行列路徑數只能為0;

畫外音:這裡只給出第0行、第0列路徑數。

2、當障礙物出現在非第0行與第0列的任意位置時,如果當前方格為障礙物時,可以直接將該方格賦值為0;

現在我們可以通過**來實現了,首先初始化二維陣列v[m][n],值預設都為0。接著初始化第0行和第0列,當未遇到障礙物時路徑數為1,否則為0,其後方格的路徑也都為0。然後通過雙層迴圈,將目標點的上邊元素與左邊元素相加,即可得到當前路徑數(在這個過程中如果遇到障礙物的話其方格數為0)。

**實現:

int uniquepathswithobstacles(int** obstaclegrid, int obstaclegridsize, int* obstaclegridcolsize)

int i, j;

int v[m][n];

memset(v, 0, m * n * sizeof(int));

//初始化第一列

for (i = 0; i 

v[i][0] = 1;

}//初始化第一行

js不好學並不是因為它難,而是因為它容易混淆

這段時間我主講的前端零基礎課,讓我感覺js這東西是越來越簡單了。你當然可以說我這是越講課越熟。確實是有這部分因素,但更主要的是,我發現js中雖然有許多的概念各不相同,但在具體的 實現中,基本都是非常類似,甚至是完全一樣的。這就導致前端新人在學習的過程中,學著學著,就分不清誰是誰了。例如在27號的課程...

卷首語 「英語」不需要專業,因為它只是工具

卷首語 英語 不需要專業,因為它只是工具 有時候如果應聘到了乙個有外資背景的公司或者這個公司的很多人都有海外或外資工作背景時,你也許還會用到一些日常工作交流時候的詞彙。比如我們看一下某主管開會時的發言 小王,請你盡快 push 一下這件事,按照前期咱們定下來的 plan 來 follow 這個 ca...

sql2005 因為它正用於複製」的錯誤解決辦法

use master 執行即可 sp removedbreplication 該儲存過程在發布伺服器的發布資料庫中或在訂閱伺服器的訂閱資料庫中執行。該過程將從執行它的資料庫中刪除所有複製物件,但它不會從其他資料庫 例如,分發資料庫 中刪除物件。注意 只有當其他刪除複製物件的方法都失敗後,才應當使用此...