Generate All Subsets

LeetCode 78 · View on LeetCode

Generate all subsets using include/exclude recursion. For each element, either add it to the current subset or skip it, then recurse on the remaining elements.

package main

import "fmt"

func subsets(nums []int) [][]int {
	result := [][]int{}
	current := []int{}

	var backtrack func(start int)
	backtrack = func(start int) {
		tmp := make([]int, len(current))
		copy(tmp, current)
		result = append(result, tmp)

		for i := start; i < len(nums); i++ {
			current = append(current, nums[i]) // choose
			backtrack(i + 1)                    // explore
			current = current[:len(current)-1]  // unchoose
		}
	}

	backtrack(0)
	return result
}

func main() {
	fmt.Println(subsets([]int{1, 2, 3}))
	// [[] [1] [1 2] [1 2 3] [1 3] [2] [2 3] [3]]
}
▶ Open Go Playground

Copy the code above and paste to run

© 2026 ByteLearn.dev. Free courses for developers. · Privacy