Permutations

Given a list of numbers, return all possible permutations and no duplicate.

Example

For nums = [1,2,3], the permutations are:

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

解题分析:

首先根据题的规律,可以看出,首先1 开始的组合,然后2开始的组合,然后3 开始的组合,可以利用DFS的方法进行解题,DFS解题技巧,例如结果是求出一个数组的列表,那么DFS的退出条件就是当前current的数组等于给定数组的长度,这时把这个current 加入结果集合中,然后就是DFS 的循环,首先每次都是从头到尾的循环数组中的每一个元素,由于数组中的元素不重复,所以非常简单的可以使用,nums[i] not in current 来跳过已经添加的数组。如果给定的nums数组如果有重复,这样需要另外的方法去解题,同时容易犯错的地方,不要直接使用current 数组,每次复制一个然后添加到result里面,如果直接使用current数组,当删除的时候,会把它整个删除掉。

重要的理解, 必须深刻理解DFS的递归树,

current 初始化的值[]

current =[]

                   []
          1         2         3
     12      13  23   21   31    32
   123      132  231  213  312   321  result.append()

Last updated

Was this helpful?