34 lines
635 B
Go
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
|