func permute(_ nums: [Int]) -> [[Int]] { var res = [[Int]]() var visited = [Bool](repeating: false, count: nums.count) get(&res, [], &visited, nums) return res } func get(_ res: inout [[Int]], _ cur:[Int], _ visited: inout [Bool] , _ nums: [Int]){ guard cur.count < nums.count else { res.append(cur) return } for i in 0 ..< nums.count where !visited[i]{ visited[i] = true get(&res, cur + [nums[i]], &visited, nums) visited[i] = false } }