See how recursion builds every possible permutation of a set of numbers.
Enter an array and click 'Visualize'.
1 public List> permute(int[] nums) {
2 List> res = new ArrayList<>();
3 backtrack(nums, 0, new ArrayList<>(), res);
4 return res;
5 }
6
7 public void backtrack(int[] nums, int idx, List curr, ...) {
8 if (idx == nums.length) {
9 res.add(new ArrayList<>(curr));
10 return;
11 }
12
13 int num = nums[idx];
14 for (int i = 0; i <= curr.size(); i++) {
15 List newList = new ArrayList<>(curr);
16 newList.add(i, num);
17 backtrack(nums, idx + 1, newList, res);
18 }
19 }