Number of Islands
تأتي الخريطة على هيئة قائمة من الصفوف متساوية الطول. كل محرف إما 1، وهو مربع من اليابسة، أو 0، وهو مربع من الماء. ينتمي مربعا يابسة إلى الجزيرة نفسها إذا كان أحدهما يقع مباشرةً فوق الآخر أو تحته أو إلى يساره أو يمينه. أما المربعات التي لا تتلامس إلا عند زاوية فلا تُعد متصلة.
خذ الخريطة ["11000", "11000", "00100", "00011"]:
- تشكل مربعات اليابسة الأربعة في الزاوية العلوية اليسرى جزيرة واحدة،
- المربع المنفرد في الصف الأوسط جزيرة ثانية، لأنه لا يتلامس مع الجزيرة الأولى إلا عند زاوية،
- ويشكل المربعان في أسفل اليمين جزيرة ثالثة.
إذن، تضم الخريطة 3 جزر.
الخريطة في الواقع رسم بياني: كل مربع من اليابسة هو عقدة، وتصل حافة بين مربعي اليابسة اللذين يشتركان في ضلع. يعني عدّ الجزر عدّ الأجزاء المتصلة من ذلك الرسم البياني. في كل مرة تعثر فيها على مربع يابسة لم تزره بعد، تكون قد عثرت على جزيرة جديدة، وتستكشفها بالكامل قبل الانتقال إلى غيرها.
اكتب دالة باسم numIslands تستقبل grid، وهي قائمة من السلاسل النصية المكوّنة من 1 (يابسة) و0 (ماء)، وتُرجع عدد الجزر. الجزيرة مجموعة من مربعات اليابسة المتصلة أفقيًا أو عموديًا.
على سبيل المثال، تُرجع ["01110", "01000", "00011", "11001"] القيمة 3: الشكل في الصفوف العلوية، والمجموعة على اليمين، والزوج في الزاوية السفلية اليسرى.
القيود: 1 <= عدد الصفوف، عدد الأعمدة <= 150. جميع الصفوف لها الطول نفسه.
الدالة
- arg1string-array
- تُرجعinteger
أمثلة
- المدخلات
- arg1 = ["11000", "11000", "00100", "00011"]
- المخرجات
- 3
- المدخلات
- arg1 = ["01110", "01000", "00011", "11001"]
- المخرجات
- 3
+13 اختبارات مخفية عند الإرسال
تلميحات
افتحها واحدًا تلو الآخر. كل تلميح يكشف أكثر قليلًا.
امسح الخريطة مربعًا تلو الآخر. عندما تصل إلى مربع أرض لم تسبق أي جزيرة إلى ضمّه، فكم جزيرة جديدة اكتشفت للتو؟
بمجرد أن تعثر على جزيرة جديدة، زُر كل مربع من اليابسة متصل بها وعلِّم كلًّا منها على أنه تمت رؤيته، حتى لا تحتسب عملية المسح الجزيرة نفسها مرة أخرى.
استكشف باستخدام طابور (بحث بعرض أولًا) أو مكدس صريح (بحث بعمق أولًا) للمربعات التي لم تزرها بعد. قد ينفد مكدس الاستدعاءات في البحث التكراري على خريطة تتكون من جزيرة واحدة ضخمة، بينما لا يحدث ذلك عند استخدام حلقة على طابورك أو مكدسك الخاص.
شرح كامل لهذه المسألة قادم قريبًا.
مسائل مشابهة
مسائل تعتمد على الأفكار نفسها. حلّ اثنتين أو ثلاث منها يثبّت النمط.
Python
def numIslands(grid):
# اكتب الكود هناالحالة 1
الحالة 2
المدخلات
arg1 = ["11000", "11000", "00100", "00011"]
المتوقع
3