Menu
CoddyTech

Rotting Oranges

בינוניגרפיםתורpython iconjava iconcpp iconc iconjs icon+10

מקבלים רשת כרשימה של שורות באורך שווה. כל תא הוא 0 (ריק), 1 (תפוז טרי) או 2 (תפוז רקוב). בכל דקה, כל תפוז טרי שחולק צלע עם תפוז רקוב, למעלה, למטה, משמאל או מימין, הופך לרקוב. יש להחזיר את מספר הדקות עד שלא יישארו תפוזים טריים, או -1 אם יש תפוז טרי שלא יכול להירקב לעולם. רשת שאין בה תפוזים טריים בתחילת הדרך דורשת 0 דקות.

פונקציה

orangesRotting(grid: integer-2d-array) → integer
gridinteger-2d-array
הרשת, רשימה אחת של 0, 1 ו-2 בכל שורה
מחזירהinteger
מספר הדקות עד שלא נשאר תפוז טרי, או ‎-1 אם זה לעולם לא קורה

אילוצים

  • 1 ≤ grid.length ≤ 150
  • 1 ≤ grid[i].length ≤ 150
  • לכל השורות יש אותו אורך.
  • כל אחד מהתאים grid[i][j] הוא 0, 1 או 2.

דוגמאות

קלט
grid = [[2, 1, 1, 0], [0, 1, 0, 1], [1, 1, 1, 1]]
פלט
6
הסבר
כשכותבים תאים בצורה (שורה, עמודה), הריקבון מתחיל ב־(0,0) וממשיך לאורך הנתיב היחיד: (0,1) בדקה 1, ‏(0,2) ו־(1,1) בדקה 2, ‏(2,1) בדקה 3, ‏(2,0) ו־(2,2) בדקה 4, ‏(2,3) בדקה 5. התפוז שב־(1,3) נוגע רק ב־(2,3), ולכן הוא האחרון להירקב, בדקה 6.

lock icon+21 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

נניח שלכל תפוז טרי דרוש מספר דקות משלו כדי להירקב לאחר שתפוז סמוך נרקב. איך תמצא את זמן הסיום במקרה כזה?

איפוס הקוד
def orangesRotting(grid):
    # כתבו כאן את הקוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

grid = [[2, 1, 1, 0], [0, 1, 0, 1], [1, 1, 1, 1]]

צפוי

6