Generate Permutations

LeetCode 46 · View on LeetCode

Generate all permutations using the swap-based approach. At each position, swap in every remaining element, recurse, then swap back to restore order.

package main

import "fmt"

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

	var backtrack func(start int)
	backtrack = func(start int) {
		if start == len(nums) {
			tmp := make([]int, len(nums))
			copy(tmp, nums)
			result = append(result, tmp)
			return
		}
		for i := start; i < len(nums); i++ {
			nums[start], nums[i] = nums[i], nums[start] // choose
			backtrack(start + 1)                          // explore
			nums[start], nums[i] = nums[i], nums[start] // unchoose
		}
	}

	backtrack(0)
	return result
}

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

Copy the code above and paste to run

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