返回介绍

solution / 0400-0499 / 0463.Island Perimeter / README_EN

发布于 2024-06-17 01:04:00 字数 4739 浏览 0 评论 0 收藏 0

463. Island Perimeter

中文文档

Description

You are given row x col grid representing a map where grid[i][j] = 1 represents land and grid[i][j] = 0 represents water.

Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounded by water, and there is exactly one island (i.e., one or more connected land cells).

The island doesn't have "lakes", meaning the water inside isn't connected to the water around the island. One cell is a square with side length 1. The grid is rectangular, width and height don't exceed 100. Determine the perimeter of the island.

 

Example 1:

Input: grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
Output: 16
Explanation: The perimeter is the 16 yellow stripes in the image above.

Example 2:

Input: grid = [[1]]
Output: 4

Example 3:

Input: grid = [[1,0]]
Output: 4

 

Constraints:

  • row == grid.length
  • col == grid[i].length
  • 1 <= row, col <= 100
  • grid[i][j] is 0 or 1.
  • There is exactly one island in grid.

Solutions

Solution 1

class Solution:
  def islandPerimeter(self, grid: List[List[int]]) -> int:
    m, n = len(grid), len(grid[0])
    ans = 0
    for i in range(m):
      for j in range(n):
        if grid[i][j] == 1:
          ans += 4
          if i < m - 1 and grid[i + 1][j] == 1:
            ans -= 2
          if j < n - 1 and grid[i][j + 1] == 1:
            ans -= 2
    return ans
class Solution {
  public int islandPerimeter(int[][] grid) {
    int ans = 0;
    int m = grid.length;
    int n = grid[0].length;
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < n; j++) {
        if (grid[i][j] == 1) {
          ans += 4;
          if (i < m - 1 && grid[i + 1][j] == 1) {
            ans -= 2;
          }
          if (j < n - 1 && grid[i][j + 1] == 1) {
            ans -= 2;
          }
        }
      }
    }
    return ans;
  }
}
class Solution {
public:
  int islandPerimeter(vector<vector<int>>& grid) {
    int m = grid.size(), n = grid[0].size();
    int ans = 0;
    for (int i = 0; i < m; ++i) {
      for (int j = 0; j < n; ++j) {
        if (grid[i][j] == 1) {
          ans += 4;
          if (i < m - 1 && grid[i + 1][j] == 1) ans -= 2;
          if (j < n - 1 && grid[i][j + 1] == 1) ans -= 2;
        }
      }
    }
    return ans;
  }
};
func islandPerimeter(grid [][]int) int {
  m, n := len(grid), len(grid[0])
  ans := 0
  for i := 0; i < m; i++ {
    for j := 0; j < n; j++ {
      if grid[i][j] == 1 {
        ans += 4
        if i < m-1 && grid[i+1][j] == 1 {
          ans -= 2
        }
        if j < n-1 && grid[i][j+1] == 1 {
          ans -= 2
        }
      }
    }
  }
  return ans
}
function islandPerimeter(grid: number[][]): number {
  let m = grid.length,
    n = grid[0].length;
  let ans = 0;
  for (let i = 0; i < m; ++i) {
    for (let j = 0; j < n; ++j) {
      let top = 0,
        left = 0;
      if (i > 0) {
        top = grid[i - 1][j];
      }
      if (j > 0) {
        left = grid[i][j - 1];
      }
      let cur = grid[i][j];
      if (cur != top) ++ans;
      if (cur != left) ++ans;
    }
  }
  // 最后一行, 最后一列
  for (let i = 0; i < m; ++i) {
    if (grid[i][n - 1] == 1) ++ans;
  }
  for (let j = 0; j < n; ++j) {
    if (grid[m - 1][j] == 1) ++ans;
  }
  return ans;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文