Permutations
Problem
Given a collection of distinct integers, return all possible permutations.
Example
1
2
3
4
5
6
7
8
9
10
Input: [1,2,3]
Output:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
My Answer
- 재귀를 이용해서 해결
helper함수에의for구문에서helper함수를 재귀 호출 한다.helper재귀 호출 하기 전과 후에,swap을 통해 배열의 순서를 변경해 주자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
helper(0, nums, result);
return result;
}
void helper(int start, int[] nums, List<List<Integer>> result){
if(start==nums.length-1){
ArrayList<Integer> list = new ArrayList<>();
for(int num: nums){
list.add(num);
}
result.add(list);
return;
}
for(int i=start; i<nums.length; i++){
swap(nums, i, start);
helper(start+1, nums, result);
swap(nums, i, start);
}
}
void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}