Island Perimeter

題目來(lái)源
一道簡(jiǎn)單題,我竟然做了半個(gè)多小時(shí),用的最笨的方法。
先找到一塊陸地,然后在深度優(yōu)先遍歷,計(jì)算。
我一開(kāi)始沒(méi)有想到邊界上的邊也算邊,然后耽誤了一些時(shí)間。

class Solution {
public:
    int islandPerimeter(vector<vector<int>>& grid) {
        int m = grid.size();
        if (m == 0)
            return 0;
        int n = grid[0].size();
        for (int i=0; i<m; i++)
            for (int j=0; j<n; j++)
                if (grid[i][j] == 1)
                    return dfs(grid, i, j);
        return 0;
    }
    
    int dfs(vector<vector<int>>& grid, int x, int y)
    {
        int res = 0;
        int a[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        grid[x][y] = -1;
        for (int i=0; i<4; i++) {
            int tmpx = x + a[i][0];
            int tmpy = y + a[i][1];
            if (tmpx == -1 || tmpx == grid.size() || tmpy == -1 || tmpy == grid[0].size() || grid[tmpx][tmpy] == 0)
                res++;
            if (tmpx >= 0 && tmpx < grid.size() && tmpy >= 0 && tmpy < grid[0].size() && grid[tmpx][tmpy] == 1)
                res += dfs(grid, tmpx, tmpy);
        }
        return res;
    }
};

看了看提示,說(shuō)用哈希,不過(guò)沒(méi)想到應(yīng)該怎么用。然后看了下討論,發(fā)現(xiàn)了一個(gè)好idea。就是遍歷,計(jì)算有多少塊陸地,然后對(duì)于每塊陸地,看看他的右邊和下邊是否是陸地,是的話就減去兩條邊,否則的話就是四條邊。
代碼如下:

class Solution {
public:
    int islandPerimeter(vector<vector<int>>& grid) {
        int m = grid.size();
        if (m == 0)
            return 0;
        int n = grid[0].size();
        int island = 0;
        int neighbor = 0;
        for (int i=0; i<m; i++)
            for (int j=0; j<n; j++)
                if (grid[i][j] == 1) {
                    island++;
                    if (j+1<n && grid[i][j+1] == 1)
                        neighbor++;
                    if (i+1<m && grid[i+1][j] == 1)
                        neighbor++;
                }
        return island * 4 - neighbor * 2;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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