classSolution{staticint[] dx ={0,0,-1,1};staticint[] dy ={1,-1,0,0};publicintislandPerimeter(int[][] grid){int res =0;int n = grid.length;int m = grid[0].length;for(int i =0;i<n;i++){for(int j =0;j<m;j++){if(grid[i][j]==1){int cnt =0;/*這個for語句是判斷每個方格的四條邊設計的,k值不同,代表的邊不同*/for(int k =0;k<4;k++){int tx = i + dx[k];int ty = j + dy[k];if(tx<0||tx>=n||ty<0||ty>=m||grid[tx][ty]==0){cnt++;}}res += cnt;}}}return res;}}
開頭兩個static數組和后文的
for(int k =0;k<4;k++){int tx = i + dx[k];int ty = j + dy[k];if(tx<0||tx>=n||ty<0||ty>=m||grid[tx][ty]==0){cnt++;}設計的很妙
方法二 深度優先遍歷
classSolution{staticint[] dx ={0,0,-1,1};staticint[] dy ={1,-1,0,0};publicintislandPerimeter(int[][] grid){int res =0;int n = grid.length;int m = grid[0].length;for(int i =0;i<n;i++){for(int j =0;j<m;j++){if(grid[i][j]==1){res +=dfs(i,j,n,m,grid);}}}return res;}publicintdfs(int x,int y,int n,int m,int[][]grid){if(x<0||x>=n||y<0||y>=m||grid[x][y]==0){return1;}if(grid[x][y]==2){return0;}grid[x][y]=2;int cnt =0;cnt +=dfs(x,y+1,n,m,grid);cnt +=dfs(x,y-1,n,m,grid);cnt +=dfs(x+1,y,n,m,grid);cnt +=dfs(x-1,y,n,m,grid);return cnt;}}