Trung bình 0 đã giải Tỷ lệ chấp nhận 0%

Chu vi đảo

Tính chiều dài đường bờ biển của các ô đất trong lưới.

Bạn sẽ học được gì

  • Đếm cạnh đất tiếp giáp nước
  • Kiểm tra bốn ô kề của mỗi ô
  • Xử lý biên của lưới

Đề bài

Xem bản gốc (English)

Lưới chứa 1 cho ô đất và 0 cho ô nước. Mỗi ô đất là một hình vuông 1×1. Hãy tính tổng chu vi của tất cả các ô đất: mỗi cạnh của ô đất tiếp giáp với nước hoặc cạnh ngoài của lưới đều được tính là 1.

Cài đặt hàm island_perimeter(grid).

Đầu vào

grid: Một lưới hình chữ nhật gồm các số 0 và 1.

Đầu ra

Trả về tổng chu vi.

Ràng buộc

0 ≤ số hàng, số cột ≤ 200

Ví dụ

Ví dụ 1
Đầu vào:
grid = [
    [0, 1, 0, 0],
    [1, 1, 1, 0],
    [0, 1, 0, 0],
    [1, 1, 0, 0]
]

Kết quả mong đợi:
expected = 16
Đầu vào:
std::vector<std::vector<long long>> grid = {
    {0, 1, 0, 0},
    {1, 1, 1, 0},
    {0, 1, 0, 0},
    {1, 1, 0, 0}
};

Kết quả mong đợi:
long long expected = 16;
Đầu vào:
long[][] grid = new long[][] {
    new long[] {0, 1, 0, 0},
    new long[] {1, 1, 1, 0},
    new long[] {0, 1, 0, 0},
    new long[] {1, 1, 0, 0}
};

Kết quả mong đợi:
long expected = 16;

Giải thích

Có 7 ô đất với tổng 28 cạnh; 6 cạnh chung loại bỏ 12: chu vi là 16.

Ví dụ 2
Đầu vào:
grid = [
    [1]
]

Kết quả mong đợi:
expected = 4
Đầu vào:
std::vector<std::vector<long long>> grid = {
    {1}
};

Kết quả mong đợi:
long long expected = 4;
Đầu vào:
long[][] grid = new long[][] {
    new long[] {1}
};

Kết quả mong đợi:
long expected = 4;

Giải thích

Một ô đất đơn lẻ có 4 cạnh.

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Mỗi ô đất góp các cạnh lộ ra ngoài, nên hãy đếm số lần đất chạm nước hoặc chạm biên.

Gợi ý 2

Một lượt quét đơn giản có thể cộng 4 cạnh cho mỗi ô đất rồi trừ đi mỗi cạnh chung với ô đất khác.

Gợi ý 3

Cẩn thận không đếm đôi các biên chung, và nhớ rằng các ô ngoài grid được xem như nước.

Độ phức tạp mong đợi

thời gian O(rows × columns), bộ nhớ phụ O(1)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.