Đề bài
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ụ
Đầ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.
Đầ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.