lc-go/solutions/0/q46/solution.go
2026-01-17 12:51:40 +09:00

34 lines
635 B
Go

package q46
func recurse(nums []int, offset int, buf []int, seen []bool, ret [][]int) [][]int {
if offset == len(nums) {
a := make([]int, len(buf))
copy(a, buf)
return append(ret, a)
}
for i := range nums {
if seen[i] {
continue
}
seen[i] = true
buf[offset] = nums[i]
ret = recurse(nums, offset+1, buf, seen, ret)
seen[i] = false
}
return ret
}
func permute(nums []int) [][]int {
totalLen := 1
for i := range len(nums) {
totalLen *= i + 1
}
ret := make([][]int, 0, totalLen)
buf := make([]int, len(nums))
seen := make([]bool, len(nums))
return recurse(nums, 0, buf, seen, ret)
}
var _ = permute