Number of Islands
Harita, eşit uzunlukta satırlardan oluşan bir liste olarak verilir. Her karakter ya bir kara karesi olan 1 ya da bir su karesi olan 0 değeridir. İki kara karesi, biri diğerinin doğrudan üstünde, altında, solunda veya sağında bulunuyorsa aynı adaya aittir. Yalnızca köşelerinden dokunan kareler birbirine bağlı değildir.
["11000", "11000", "00100", "00011"] haritasını ele alalım:
- sol üst köşedeki dört kara karesi bir ada oluşturur,
- orta sıradaki tek kare, ilkine yalnızca köşesinden dokunduğu için ikinci bir adadır,
- sağ alt köşedeki iki kare de üçüncü bir ada oluşturur.
Yani haritada 3 ada vardır.
Harita aslında bir grafiktir: her kara karesi bir düğümdür ve kenar, bir kenarı paylaşan iki kara karesini birleştirir. Ada sayısını bulmak, bu grafiğin bağlantılı parçalarını saymak demektir. Henüz ziyaret etmediğin bir kara karesi bulduğunda yeni bir ada bulmuş olursun ve sonraki adaya geçmeden önce o adanın tamamını keşfedersin.
numIslands adlı, grid değerini alan; 1 (kara) ve 0 (su) karakterlerinden oluşan bir dizge listesi olan ve ada sayısını döndüren bir işlev yazın. Bir ada, yukarı, aşağı, sola veya sağa bağlı kara karelerinden oluşan bir gruptur.
Örneğin, ["01110", "01000", "00011", "11001"] değeri 3 döndürür: üst sıradaki şekil, sağdaki grup ve sol alt köşedeki ikili.
Kısıtlamalar: 1 <= satır sayısı, sütun sayısı <= 150. Tüm satırlar aynı uzunluktadır.
Fonksiyon
- arg1string-array
- Döndürürinteger
Örnekler
- Girdi
- arg1 = ["11000", "11000", "00100", "00011"]
- Çıktı
- 3
- Girdi
- arg1 = ["01110", "01000", "00011", "11001"]
- Çıktı
- 3
Gönderirken +13 gizli test
İpuçları
Tek tek açın. Her biri biraz daha fazlasını gösterir.
Haritayı kare kare tara. Daha önce hiçbir adanın sahiplenmediği bir kara karesine ulaştığında, az önce kaç yeni ada bulmuş oldun?
Yeni bir ada bulduğunda, ona bağlı tüm kara karelerini ziyaret edip her birini görülmüş olarak işaretle; böylece tarama aynı adayı yeniden saymaz.
Henüz ziyaret edilmemiş kareleri bir kuyrukla (önce genişlik) ya da açıkça oluşturulmuş bir yığınla (önce derinlik) keşfet. Özyinelemeli bir arama, tek ve devasa bir adadan oluşan bir haritada çağrı yığınını tüketebilir; kendi kuyruğun ya da yığınındaki bir döngü ise bunu yapamaz.
Bu problemin tam çözüm anlatımı yakında geliyor.
Benzer problemler
Aynı fikirleri kullanan problemler. İki üçünü çözmek bir kalıbı kalıcı hale getirir.
Python
def numIslands(grid):
# Kodu buraya yazınDurum 1
Durum 2
Girdi
arg1 = ["11000", "11000", "00100", "00011"]
Beklenen
3