12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package main
- import (
- "fmt"
- )
- func main() {
- fmt.Println("hello")
- nums := []int{1, 2, 3}
- fmt.Println(permute(nums))
- }
- func permute(nums []int) [][]int {
- result := [][]int{}
- length := len(nums)
- dataMap := make(map[int]bool)
- for i := 0; i < length; i++ {
- dataMap[nums[i]] = false
- }
- row := []int{}
- var backMethod func(nums []int, length int, row []int)
- backMethod = func(nums []int, length int, row []int) {
- for i := 0; i < length; i++ {
- // if dataMap[nums[i]] {
- // return //这里必须得注视掉,因为递归的时候(row[:low(row)-1]),会直接从这个出口出去了。
- // }
- if !dataMap[nums[i]] {
- row = append(row, nums[i])
- dataMap[nums[i]] = true
- backMethod(nums, length, row)
- row = row[:len(row)-1]
- dataMap[nums[i]] = false
- }
- }
- if length == len(row) {
- row2 := []int{}
- for i := 0; i < len(row); i++ {
- row2 = append(row2, row[i])
- }
- result = append(result, row2)
- // return
- }
- }
- backMethod(nums, length, row)
- return result
- }
|