78. Subsets
https://leetcode.com/problems/subsets/
題意
傳入一個數值陣列,將元素與元素之間的所有有可能發生的組合回傳。
解題思路
可以把每個元素想像為取或者不取,如果取了就把元素塞入 stack 中,如果不取就跳過,並且遞迴的調用方法,直到把所有結果都騙例。
- 宣告一個結果變數,一個 stack ,一個 nums 的長度變數。
- 開始遞迴調用方法,並且傳入方法被遞歸的次數值,每次執行方法都要先不取值,然後後再把值 push stack 中,在調用方法,然後調用完畢再把值 pop 出來。
- 假設 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 的筆記本 留言,順手給我個讚吧!你的讚將成為我持續更新的動力,感謝你的閱讀,讓我們一起學習成為更好的自己。