全排列问题相比传统组合问题,需要遍历全部数组数据,但同时需要注意顺序,解决办法就是使用used数组。

全排列分为以下两种情况:

  • 1 全排列返回数组不需要去重
    • 1 for循环中需要遍历全部数组数据。
    • 2 for循环中需要使用used数组控制跳过已经遍历过的数据。
  • 2 全排列返回数组需要去重
    • 1 全排列返回数组不需要去重方法
    • 2 组合总和II去重方法
      • nums 排序
      • if  (i>0 && nums[i-1] == nums[i] && used[i-1] == false)判断

1 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

全排列的重复是树枝内重复。

2 全排列II

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

示例 1:

输入:nums = [1,1,2]
输出:
[[1,1,2],
 [1,2,1],
 [2,1,1]]

全排列II的重复是树枝内重复和同树层重复。