463. Island Perimeter (5月29日)

解答

class Solution {
public:
    int islandPerimeter(vector<vector<int>>& grid) {
        int num=0,edge=0;
        for(int i=0;i<grid.size();++i){
            for(int j=0;j<(*grid.begin()).size();++j){
                if(grid[i][j]==1){
                    ++num;
                    if(i+1!=grid.size()&&grid[i+1][j]==1)                ++edge;
                    if(j+1!=(*grid.begin()).size()&&grid[i][j+1]==1)     ++edge;
                }
            }
        }
        return 4*num-2*edge;
    }
};

笔记

这个题是我参考了解答之后才正确做对的

想到的:

  1. 岛的周长=4ב1’的个数-2×相邻边数
    其中‘1’的个数很容易求得,但问题关键在于边数

求相邻边数:

因为相邻边的俩个节点是相互的,比如A结点在B结点左边,有一条相邻边,那么B结点就在A结点右边。所以左右相邻只需要确定一个方向就好了

因此我们只需判断一个结点的右侧和下侧结点是不是与它相邻就好了。如果相邻,这说明也是‘1’

若当前结点在最右列或最下行时就不需要在找其右侧和下侧的结点,所以要加上判断条件是否是最右列或最下行

猜你喜欢

转载自www.cnblogs.com/cs-niaocai/p/9108718.html
今日推荐