【leetcode】329. Longest Increasing Path in a Matrix(矩陣中的最長上升路徑)(DP)

1、題目描述

Given an integer matrix, find the length of the longest increasing path.

From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or move outside of the boundary (i.e. wrap-around is not allowed).

Example 1:

Input: nums =
[
? [9,9,4],
? [6,6,8],
? [2,1,1]
]
Output: 4
Explanation: The longest increasing path is [1, 2, 6, 9].

Example 2:

Input: nums =
[
? [3,4,5],
? [3,2,6],
? [2,2,1]
]
Output: 4
Explanation: The longest increasing path is [3, 4, 5, 6]. Moving diagonally is not allowed.

2宵凌、問題描述:

  • 在一個(gè)矩陣中找到一個(gè)最長的嚴(yán)格遞增的路徑郊供。要求不能對角線走。

3徐鹤、問題關(guān)鍵:

  • DP垃环,能走到當(dāng)前點(diǎn),說明比當(dāng)前點(diǎn)小返敬。
  • 狀態(tài)變量:f[x][y]遂庄,表示走到(x, y)點(diǎn)的最長路徑劲赠。
  • 狀態(tài)轉(zhuǎn)移:f[x][y] = max(f[x][y], dp(a, b) + 1); (a, b)是(x, y)周圍的點(diǎn)涛目。表示能夠從(a, b) 走到(x, y).

4、C++代碼:

class Solution {
public:
    int n, m; 
    vector<vector<int>> f;
    int dx[4]  = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
    int longestIncreasingPath(vector<vector<int>>& matrix) {
        if (matrix.empty()) return 0;
        n = matrix.size(), m = matrix[0].size();
        f = vector<vector<int>> (n, vector<int>(m, -1));
        int res = 0; 
        for (int i = 0; i < n; i ++) 
            for (int j = 0; j < m; j ++) 
                res = max(res, dp(i, j, matrix));
        return res;
    }
    int dp(int x, int y, vector<vector<int>>& matrix) {
        if (f[x][y] != -1) return f[x][y];
        f[x][y] = 1;
        for (int i = 0; i < 4; i ++) {
            int a = x + dx[i], b = y + dy[i];
            if (a >= 0 && a < n && b >= 0 && b < m && matrix[a][b] > matrix[x][y])
                f[x][y] = max(f[x][y], dp(a, b, matrix) + 1);
        }
        return f[x][y];
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凛澎,一起剝皮案震驚了整個(gè)濱河市霹肝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塑煎,老刑警劉巖沫换,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異最铁,居然都是意外死亡讯赏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門冷尉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漱挎,“玉大人,你說我怎么就攤上這事雀哨】牧拢” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵雾棺,是天一觀的道長膊夹。 經(jīng)常有香客問我,道長捌浩,這世上最難降的妖魔是什么割疾? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嘉栓,結(jié)果婚禮上宏榕,老公的妹妹穿的比我還像新娘拓诸。我一直安慰自己,他們只是感情好麻昼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布奠支。 她就那樣靜靜地躺著,像睡著了一般抚芦。 火紅的嫁衣襯著肌膚如雪倍谜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天叉抡,我揣著相機(jī)與錄音尔崔,去河邊找鬼。 笑死褥民,一個(gè)胖子當(dāng)著我的面吹牛季春,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播消返,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼载弄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撵颊?” 一聲冷哼從身側(cè)響起宇攻,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倡勇,沒想到半個(gè)月后逞刷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妻熊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年亲桥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片固耘。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖词身,靈堂內(nèi)的尸體忽然破棺而出厅目,到底是詐尸還是另有隱情,我是刑警寧澤法严,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布损敷,位于F島的核電站,受9級特大地震影響深啤,放射性物質(zhì)發(fā)生泄漏拗馒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一溯街、第九天 我趴在偏房一處隱蔽的房頂上張望诱桂。 院中可真熱鬧洋丐,春花似錦、人聲如沸挥等。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肝劲。三九已至迁客,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辞槐,已是汗流浹背掷漱。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榄檬,地道東北人卜范。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像丙号,于是被迫代替她去往敵國和親先朦。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容