Alan Zhan 部落格

Live for nothing, or die for something

78. Subsets

https://leetcode.com/problems/subsets/

Medium


Given an integer array nums of unique elements, return all possible subsets (the power set).

The solution set must not contain duplicate subsets. Return the solution in any order.

 

Example 1:

Input: nums = [1,2,3]
Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

Example 2:

Input: nums = [0]
Output: [[],[0]]

 

Constraints:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • All the numbers of nums are unique.

題意

傳入一個數值陣列,將元素與元素之間的所有有可能發生的組合回傳。

解題思路

可以把每個元素想像為取或者不取,如果取了就把元素塞入 stack 中,如果不取就跳過,並且遞迴的調用方法,直到把所有結果都騙例。

  1. 宣告一個結果變數,一個 stack ,一個 nums 的長度變數。
  2. 開始遞迴調用方法,並且傳入方法被遞歸的次數值,每次執行方法都要先不取值,然後後再把值 push stack 中,在調用方法,然後調用完畢再把值 pop 出來。
  3. 假設 length 與 被遞歸的次數值(i) 相等時,就代表這是其中一個結果,然後將結果塞入 ans 中,直到所有的遞歸都被執行完畢。

原始碼

var stack []int
var ans [][]int
var length int

func subsets(nums []int) [][]int {
    length = len(nums)
    stack = []int{}
    ans = [][]int{}
    recursive(0, nums)
    return ans
}

func recursive(i int, nums []int) {
    if length == i {
        temp := make([]int, len(stack))
        copy(temp, stack)
        ans = append(ans, temp)
        return
    }
    
    recursive(i + 1, nums)
    stack = append(stack, nums[i])
    recursive(i + 1, nums)
    stack = stack[:len(stack) - 1]
}

結尾

你有更好或更簡單的解決方案嗎?

歡迎到我的 Facebook Alan 的筆記本 留言,順手給我個讚吧!你的讚將成為我持續更新的動力,感謝你的閱讀,讓我們一起學習成為更好的自己。