classSolution: defpermute(self, nums: List[int]) -> List[List[int]]: n = len(nums) if n == 0: return [[]] ans = [] s = set() tmp = [] defdfs(): # nonlocal ans, s, tmp iflen(tmp) == n: ans.append(tmp.copy()) return for i inrange(n): if nums[i] in s: continue s.add(nums[i]) tmp.append(nums[i]) dfs() s.remove(tmp.pop()) dfs() return ans
var result [][]int var path []int funcpermute(nums []int) [][]int { result = [][]int{} path = []int{} m := make(map[int]bool) backtracking(nums, m) return result }
funcbacktracking(nums []int, m map[int]bool) { iflen(path) == len(nums) { t := make([]int, len(path)) copy(t, path) result = append(result, t) } for i := 0; i < len(nums); i++ { if m[i] == true {continue} m[i] = true path = append(path, nums[i]) backtracking(nums, m) path = path[:len(path) - 1] m[i] = false } }