圖解LeetCode——994. 腐爛的橘子

一僻澎、題目

在給定的 m x n 網(wǎng)格 grid 中貌踏,每個(gè)單元格可以有以下三個(gè)值之一:

  • 0 代表空單元格
  • 1 代表新鮮橘子窟勃;
  • 2代表腐爛的橘子祖乳。

每分鐘,腐爛的橘子 周圍 4 個(gè)方向上相鄰 的新鮮橘子都會(huì)腐爛秉氧。
返回直到單元格中沒有新鮮橘子為止所必須經(jīng)過的最小分鐘數(shù)凡资。如果不可能,返回 -1 谬运。

二、示例

2.1> 示例 1:

輸入】grid = [[2,1,1],[1,1,0],[0,1,1]]
輸出】4

2.2> 示例 2:

輸入】grid = [[2,1,1],[0,1,1],[1,0,1]]
輸出】-1
解釋】左下角的橘子(第 2 行垦藏, 第 0 列)永遠(yuǎn)不會(huì)腐爛梆暖,因?yàn)楦癄€只會(huì)發(fā)生在 4 個(gè)正向上。

2.3> 示例 3:

輸入】grid = [[0,2]]
輸出】0
解釋】因?yàn)?0 分鐘時(shí)已經(jīng)沒有新鮮橘子了掂骏,所以答案就是 0 轰驳。

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 10
  • grid[i][j] 僅為 012

三弟灼、解題思路

根據(jù)題目描述级解,我們要計(jì)算出單元格中沒有新鮮橘子為止所必須經(jīng)過的最小分鐘數(shù)。由于腐爛的橘子可以將好的橘子也變腐爛田绑,所以勤哗,我們需要采用某種方式,將這種橘子腐爛的輪次模擬計(jì)算出來掩驱。

這里芒划,我們首先創(chuàng)建一個(gè)隊(duì)列冬竟,即:Deque。然后先將矩陣中腐爛的橘子保存到deque中民逼。然后獲取deque中存儲的腐爛橘子的個(gè)數(shù)num泵殴,那么當(dāng)num個(gè)橘子從deque中出棧之后,就表示該輪次執(zhí)行完畢拼苍。

那么笑诅,當(dāng)我們從隊(duì)列deque彈出腐爛的橘子之后,我們會(huì)將該爛橘子的疮鲫、吆你、的新鮮橘子都變?yōu)闋€橘子棚点,即:grid[x][y] = 2早处。然后將剛剛變爛的句子放入到deque中,準(zhǔn)備作為后續(xù)下一輪需要操作的爛橘子瘫析。

那么砌梆,需要補(bǔ)充一點(diǎn)的就是,當(dāng)我們計(jì)算矩陣中腐爛橘子的同時(shí)贬循,也可以同時(shí)獲得新鮮的橘子的個(gè)數(shù)fresh咸包,當(dāng)面當(dāng)我們發(fā)現(xiàn)fresh等于0的時(shí)候,則說明所有的好橘子都被腐爛了杖虾,返回操作的輪次數(shù)烂瘫;而當(dāng)我們操作完所有的腐爛橘子,而fresh依然不為0奇适,則說明某些新鮮的橘子是不會(huì)被傳染腐爛的坟比,則直接返回-1即可。

以上就是本題的解題思路嚷往。為了方便大家理解葛账,請參照下圖圖解即可:

四、代碼實(shí)現(xiàn)

class Solution {
    int fresh = 0, minute = 0;
    Deque<int[]> deque = new ArrayDeque();
    public int orangesRotting(int[][] grid) {
        int result = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] == 2) deque.addLast(new int[]{i, j});
                if (grid[i][j] == 1) fresh++;
            }
        }
        while (fresh > 0 && !deque.isEmpty()) {
            minute++;
            int nums = deque.size();
            for (int i = 0; i < nums; i++) {
                int[] cell = deque.removeFirst();
                int x = cell[0], y = cell[1];
                rot(grid, x - 1, y); // 查看上方單元格
                rot(grid, x + 1, y); // 查看下方單元格
                rot(grid, x, y - 1); // 查看左側(cè)單元格
                rot(grid, x, y + 1); // 查看右側(cè)單元格
            }
        }
        return fresh > 0 ? -1 : minute; 
    }
    public void rot(int[][] grid, int x, int y) {
        if (x >= 0 && y >=0 && x < grid.length && y < grid[0].length && grid[x][y] == 1) {
            grid[x][y] = 2;
            deque.addLast(new int[]{x, y});
            fresh--;
        }
    }
}

今天的文章內(nèi)容就這些了:

寫作不易皮仁,筆者幾個(gè)小時(shí)甚至數(shù)天完成的一篇文章籍琳,只愿換來您幾秒鐘的 點(diǎn)贊 & 分享

更多技術(shù)干貨贷祈,歡迎大家關(guān)注公眾號“爪哇繆斯” ~ \(o)/ ~ 「干貨分享趋急,每天更新」

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市势誊,隨后出現(xiàn)的幾起案子呜达,更是在濱河造成了極大的恐慌,老刑警劉巖粟耻,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闻丑,死亡現(xiàn)場離奇詭異漩怎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嗦嗡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門勋锤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侥祭,你說我怎么就攤上這事叁执。” “怎么了矮冬?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵谈宛,是天一觀的道長。 經(jīng)常有香客問我胎署,道長吆录,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任琼牧,我火速辦了婚禮恢筝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巨坊。我一直安慰自己撬槽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布趾撵。 她就那樣靜靜地躺著侄柔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪占调。 梳的紋絲不亂的頭發(fā)上暂题,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音究珊,去河邊找鬼薪者。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苦银,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赶站,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼幔虏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贝椿?” 一聲冷哼從身側(cè)響起想括,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烙博,沒想到半個(gè)月后瑟蜈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烟逊,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年铺根,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宪躯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡位迂,死狀恐怖访雪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掂林,我是刑警寧澤臣缀,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站泻帮,受9級特大地震影響精置,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锣杂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一脂倦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹲堂,春花似錦狼讨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朽基,卻和暖如春布隔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稼虎。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工衅檀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霎俩。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓哀军,卻偏偏與公主長得像,于是被迫代替她去往敵國和親打却。 傳聞我的和親對象是個(gè)殘疾皇子杉适,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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