Menu
CoddyTech

Subsets

נתונה לך רשימה nums של מספרים שלמים שונים. החזר כל תת־קבוצה שלה, כולל הקבוצה הריקה והרשימה המלאה, כך ש־n ערכים נותנים 2^n תת־קבוצות. כתוב כל תת־קבוצה כשהערכים שלה בסדר עולה, ורשום את תת־הקבוצות בסדר לקסיקוגרפי: השווה בין שתי תת־קבוצות ערך אחר ערך, וההבדל הראשון הוא שקובע; תת־קבוצה שהיא תחילתה של תת־קבוצה אחרת מופיעה לפניה. עבור [1, 2] התשובה היא [[], [1], [1, 2], [2]].

פונקציה

subsets(nums: integer-array) → integer-2d-array
numsinteger-array
הערכים, כולם שונים, בכל סדר
מחזירהinteger-2d-array
כל תת־קבוצה, ממוינת בסדר עולה, ומופיעה בסדר לקסיקוגרפי

אילוצים

  • 1 ≤ nums.length ≤ 10
  • -10 ≤ nums[i] ≤ 10
  • כל הערכים ב־nums שונים.
  • nums יכולים להופיע בכל סדר.

דוגמאות

קלט
nums = [3, 1, 2]
פלט
[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]
הסבר
לאחר המיון, הערכים הם 1, 2, 3, ושלושה ערכים נותנים 2^3 = 8 תתי־קבוצות. [1, 2] מופיע לפני [1, 2, 3] כי הוא תחילית שלו, ו־[1, 2, 3] מופיע לפני [1, 3] כי 2 קטן מ־3 במיקום השני.

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

challenge icon

שאלת המשך

האם תוכל ליצור את אותה רשימה ללא רקורסיה, ולבנות כל תת־קבוצה ישירות מזו שקדמה לה?

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

מקרה 1

מקרה 2

מקרה 3

קלט

nums = [3, 1, 2]

צפוי

[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]