Skip to content

Latest commit

 

History

History
33 lines (28 loc) · 857 Bytes

46.permutations.md

File metadata and controls

33 lines (28 loc) · 857 Bytes
private val results = mutableListOf<List<Int>>()

fun permute(nums: IntArray): List<List<Int>> {
    for (i in 0 until nums.size) {
        val used = hashSetOf<Int>()
        used.add(nums[i])
        dfs(nums, mutableListOf(nums[i]), used)
    }
    return results
}

private fun dfs(nums: IntArray, permutation: MutableList<Int>, used: HashSet<Int>) {
    if (permutation.size == nums.size) {
        results.add(ArrayList<Int>(permutation))
        return
    }
    
    for (num in nums) {
        if (used.contains(num)) continue
        used.add(num)
        permutation.add(num)
        dfs(nums, permutation, used)
        permutation.removeAt(permutation.size - 1)
        used.remove(num)
    }
}
  • Time Complexity: O(n! * n)
  • Space Complexity: O(n).