白話解 Leetcode - 78 Subsets

Posted by Alan Zhan on Monday, June 20, 2022

78. Subsets

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


題意

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

解題思路

可以把每個元素想像為取或者不取,如果取了就把元素塞入 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 的筆記本 留言,順手給我個讚吧!你的讚將成為我持續更新的動力,感謝你的閱讀,讓我們一起學習成為更好的自己。