diff --git a/go/subsets.go b/go/subsets.go new file mode 100644 index 0000000..52fc3f8 --- /dev/null +++ b/go/subsets.go @@ -0,0 +1,29 @@ +package subsets + +func subsets(nums []int) [][]int { + var sets [][]int + + var subsetsRec func(int) + + var runningSet []int + subsetsRec = func(i int) { + if i == len(nums) { + toAppend := make([]int, len(runningSet)) + copy(toAppend, runningSet) + + sets = append(sets, toAppend) + return + } + + // Skip the current element + subsetsRec(i + 1) + + // Include the current element + runningSet = append(runningSet, nums[i]) + subsetsRec(i + 1) + runningSet = runningSet[:len(runningSet)-1] + } + + subsetsRec(0) + return sets +}