Skip to content

Commit ffa3f46

Browse files
committed
排列组合: 全排列
Change-Id: I11f76d8bb8298fb4e0dad02454b7047b6d669fd4
1 parent d432798 commit ffa3f46

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

go/leetcode/46.全排列.go

+34-5
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@
3232

3333

3434
func permute(nums []int) [][]int {
35-
visited := make([]bool, len(nums))
36-
out := []int{}
37-
res := [][]int{}
38-
permuteDFS(&nums, 0, &visited, &out, &res)
39-
return res
35+
// visited := make([]bool, len(nums))
36+
// out := []int{}
37+
// res := [][]int{}
38+
// permuteDFS(&nums, 0, &visited, &out, &res)
39+
// return res
40+
return helper(nums)
4041
}
4142

4243
// 深度优先递归,通过访问标记数组去重
@@ -57,3 +58,31 @@ func permuteDFS(nums *[]int, level int, visited *[]bool, out *[]int, res *[][]in
5758
}
5859
}
5960

61+
func add(arr []int, num int) [][]int {
62+
ret := [][]int{}
63+
for i := 0; i <= len(arr); i++ {
64+
tmp := append([]int{}, arr[:i]...)
65+
tmp = append(tmp, num)
66+
tmp = append(tmp, arr[i:]...)
67+
ret = append(ret, tmp)
68+
}
69+
return ret
70+
}
71+
72+
func helper(nums []int) [][]int {
73+
if len(nums) <= 1 {
74+
return [][]int{nums}
75+
}
76+
ret := add([]int{}, nums[0])
77+
for i := 1; i < len(nums); i++ {
78+
arr := [][]int{}
79+
for j := 0; j < len(ret); j++ {
80+
tmp := add(ret[j], nums[i])
81+
arr = append(arr, tmp...)
82+
}
83+
ret = append([][]int{}, arr...)
84+
}
85+
return ret
86+
}
87+
88+

0 commit comments

Comments
 (0)