https://leetcode.com/problems/permutations/

Given a collection of distinct numbers, return all possible permutations.

For example, [1,2,3] have the following permutations:

[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]

解题 :排列问题,这个题的区别在于我们不用在backtrack函数设index参数来追踪当前index,我们需要检测list有没有当前值就行了。用图表示如下。

     123
          []
     /     |    \
    1      2     3
   /\      |\     | \
  12 13   21 23   31 32
  /   \    |  |   |   |
123   132 213 231 312 321
public List<List<Integer>> permute(int[] nums) {
   List<List<Integer>> list = new ArrayList<>();
   // Arrays.sort(nums); // not necessary
   backtrack(list, new ArrayList<>(), nums);
   return list;
}

private void backtrack(List<List<Integer>> list, List<Integer> tempList, int [] nums){
   if(tempList.size() == nums.length){
      list.add(new ArrayList<>(tempList));
   } else{
      for(int i = 0; i < nums.length; i++){ 
         if(tempList.contains(nums[i])) continue; // element already exists, skip
         tempList.add(nums[i]);
         backtrack(list, tempList, nums);
         tempList.remove(tempList.size() - 1);
      }
   }
}

results matching ""

    No results matching ""