329 矩陣中的最長遞增路徑

2021-10-08 12:58:05 字數 1945 閱讀 2591

給定乙個整數矩陣,找出最長遞增路徑的長度。

對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。

示例 1:

輸入: nums =

[[9,9,4],

[6,6,8],

[2,1,1]

]輸出: 4

解釋: 最長遞增路徑為 [1, 2, 6, 9]。

示例 2

輸入: nums =

[[3,4,5],

[3,2,6],

[2,2,1]

]輸出: 4

解釋: 最長遞增路徑是 [3, 4, 5, 6]。注意不允許在對角線方向上移動。

解法一:暴力深搜

遍歷矩陣的每乙個元素,深搜每乙個元素稱為一輪。每一輪中看當前元素上下左右的數有沒有比它大的並且沒有被搜過,有的話繼續深搜,並且記錄當前深搜的深度,即最長路徑。給出**:

class solution ;

int column[4] = ;

int maxdepth = 1;

bool is_legal(int x, int y, int lenmatrix, int vis)

return false;

}void dfs(int dx, int dy, vector>& matrix, int depth, vector>& visited)

if(maxdepth < depth)

visited[dx][dy] = 1;

for(int k = 0; k < 4; k++)}}

int longestincreasingpath(vector>& matrix)

int len = matrix[0].size();

for(int i = 0; i < len; i++)

}return maxdepth;

}};

這種方法有乙個問題,那就是可能會出現重複搜尋問題,比如說假設當前有個鏈路1 --> 2 --> 6 --> 9,當深搜1這一輪是會遍歷這個鏈路,深搜2這一輪時有可能還是會遍歷這一輪,但是思考一下深搜1時遍歷出1 --> 2 --> 6 --> 9是最長情況,那麼遍歷2時不需要看也能知道最長路徑是2 --> 6 --> 9。所以我們可以記錄某乙個元素起始時最長路徑的長度,那麼當節點搜到它時,只需要直接加上它的路徑長度,不用重複搜尋了。

下面給出改進後的**:

解法二:帶有記憶的深搜

class solution ;

int column[4] = ;

bool is_legal(int x, int y, int lenx, int leny)

return false;

}int dfs(int dx, int dy, vector>& matrix, vector>& visited)

if(visited[dx][dy] > 0)

int temp = 0;

for(int k = 0; k < 4; k++)}}

visited[dx][dy] = temp+1;

return temp+1;

}int longestincreasingpath(vector>& matrix)

vector> visited(matrix.size(), vector(matrix[0].size(), 0));

int maxnum = 0;

for(int i = 0; i < matrix.size(); i++)}}

return maxnum;

}};

這種方法的主要思路在於:依次遍歷矩陣中的元素,對於每乙個元素,找四周比它小的元素的最長路徑,找到的最長路徑加一就是該元素的最長路徑。

329 矩陣中的最長遞增路徑

給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 示例 1 輸入 nums 9,9,4 6,6,8 2,1,1 輸出 4 解釋 最長遞增路徑為 1,2,6,9 示例 2 輸入 nums 3,4,5 3,...

329 矩陣中的最長遞增路徑

給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 示例 1 輸入 nums 9,9,4 6,6,8 2,1,1 輸出 4 解釋 最長遞增路徑為 1,2,6,9 dfs 記憶矩陣 儲存以該點位起點的最長路...

329 矩陣中的最長遞增路徑

題目 型別 深搜 記憶化遞迴 難度 困難 題意 從乙個二維矩陣中找到乙個嚴格遞增的路徑。使用深度搜尋,不需要標記,因為到當前點是需要滿足比原來點數值大的,所以也不會重複遍歷。然後使用記憶化遞迴記錄最長的路徑,如果已經計算過了直接返回。備註 2020.4.18位元組跳動三面面試題。面試官提示我使用回溯...