Menu
CoddyTech

Combination Sum

בינוניחיפוש לאחורpython iconjava iconcpp iconc iconjs icon+10

נתונה לך רשימה candidates של מספרים שלמים חיוביים שונים ומספר שלם חיובי target. מצא את כל הצירופים של מועמדים שסכום הערכים שלהם הוא בדיוק target, כאשר אפשר להשתמש בכל מועמד כמה פעמים שרוצים. שני צירופים נחשבים זהים אם הם משתמשים באותם ערכים אותו מספר פעמים, ולכן [2, 3, 3] ו-[3, 2, 3] נחשבים לצירוף אחד.

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

פונקציה

combinationSum(candidates: integer-array, target: integer) → integer-2d-array
candidatesinteger-array
הערכים השונים שבהם אפשר להשתמש, בכל סדר, וכל אחד מהם כמה פעמים שרוצים
targetinteger
הסכום של כל שילוב חייב להיות בדיוק
מחזירהinteger-2d-array
כל צירוף שסכומו הוא היעד, כאשר איבריו מסודרים בסדר עולה, והצירופים מסודרים בסדר לקסיקוגרפי

אילוצים

  • 1 ≤ candidates.length ≤ 50
  • 2 ≤ candidates[i] ≤ 500
  • 2 ≤ target ≤ 500
  • כל הערכים ב-candidates שונים זה מזה, ללא סדר מסוים.
  • לפחות צירוף אחד מגיע אל target, ולכל היותר 150 צירופים עושים זאת.

דוגמאות

קלט
candidates = [6, 2, 3]target = 8
פלט
[[2, 2, 2, 2], [2, 3, 3], [2, 6]]
הסבר
ארבע פעמים 2 שווה 8, וכך גם 2 + 3 + 3 ו־2 + 6. שלושתם מתחילים ב־2, ולכן הערך השני קובע את הסדר: 2, אחר כך 3, ואז 6. בלי 2 יש לך רק 3 ו־6, וכל שילוב שלהם הוא כפולה של 3, ו־8 אינו כזה.

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

challenge icon

שאלת המשך

כעת אפשר להשתמש בכל מועמד לכל היותר פעם אחת, ו-candidates יכול להכיל ערכים חוזרים. איך משנים את החיפוש כך שאף שילוב לא יופיע פעמיים?

איפוס הקוד
def combinationSum(candidates, target):
    # כתבו כאן את הקוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

candidates = [6, 2, 3]
target = 8

צפוי

[[2, 2, 2, 2], [2, 3, 3], [2, 6]]