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ים, ‏2 + 3 + 3 ו־2 + 6 מסתכמים כולם ב־8, לפי הסדר של הערך השני שלהם. בלי 2 נשארים רק 3ים ו־6ים, והסכומים שלהם הם כפולות של 3, ו־8 אינו כזה.
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]]