Construct recursion method "permute" with params: int[] nums, List<>curr, List<List<>> result, boolean[] seen
Iterate from 0 index to end of nums; If index already seen, continue; If index element equals to previous one and previous one is not seen, meaning permutation with previous element in the front is been created, then makes no difference to use current index element as the front one (1,1,2==1,1,2), so continue
Else, add current index element to curr, seen[index] = true, and recursively call on curr