這次講解的題目是leetcode上的t200島嶼數量,話不多說,題目如下:
首先看到題目的我是一臉茫然tat,不知道從何下手!
細思之後:
肯定要做額是我們得遍歷陣列,對吧!
關鍵在於怎麼判斷是否是乙個島
我們要判斷是否相連,比如當前座標點為『1』,與它相連的地方如果是『1』的話就說明該兩點為乙個島,通過對這個為』1』的點我們也要進行判斷其周圍是否為『1』!但是如果判斷完後,其他的點也會判斷到已經判斷過的點,怎麼辦呢!??
既然已經判斷完了的點,就說明其周圍沒有『1』了,那麼我們可以用"感染"的思想,將已經判斷過的點變成』0』,那麼當遍歷二維陣列的時候就不會衝突。
如下圖:
這是遍歷陣列的時候碰到第乙個『1』
然後我們進行判斷完之後的,將其變為』0』,然後進行下乙個判斷:
通過上圖可以得到我們的思路是:遍歷陣列,如果當前的節點為1,那麼以改點遞迴進行深度優先搜尋(dfs),並且將遍歷到為1的節點變0.
那麼思路我們出來了,怎麼設計演算法呢?
遞迴函式(dfs)首先我們得想到遞迴的結束條件,自然是座標越界的時候,還有呢?當當前座標為『0』的時候我們就結束從該點往後的搜尋!這就是結束條件。
接下來上**:
class solution
int landnum=0; //島嶼個數
//遍歷陣列
for(int i=0;i=grid.length||j>=grid[0].length||grid[i][j]=='0')
//將當前的點變為'0' 然後對上下左右的點進行遞迴
grid[i][j]='0';
dfs(grid,i-1,j);
dfs(grid,i+1,j);
dfs(grid,i,j-1);
dfs(grid,i,j+1);}}
Leetcode刷題筆記之200 島嶼數量
給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000...
LeetCode刷題之T146LRU快取機制
這次講解的題目是leetcode刷題之t146lru快取機制 首先我們先看下題目 這道題的思路是使用linkedhashmap進行k v鍵值對,首先我們知道linkedhashmap是乙個有序的hashmap,利用其有序性,將最近操作的key取出,放到linkedhashmap的最後邊。接下來上 c...
Leetcode刷題之括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...