47. 全排列 II

思路

  • 排序,人为规定顺序去重。
  • 深搜+回溯
class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    vector<bool> st;
    int n;
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        n = nums.size();
        st.resize(n);
        path.resize(n);
        sort(nums.begin(), nums.end());
        dfs(nums, 0, 0); //人为规定顺序
        return res;
    }
    void dfs(vector<int>& nums, int u, int start){
        if(u == n){
            res.push_back(path);
            return;
        }
        
        for(int i = start; i < n; i++){
            if(!st[i]){
                st[i] = true;
                path[i] = nums[u]; //i这个位置放哪个数
                dfs(nums, u+1, u+1<n && nums[u+1]==nums[u]? i+1: 0);
                st[i] = false;
            }
        }
    }
};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述(中等难度) 和上一道题类似,不同之处就是给定的数字中会有重复的,这样的话用之前的算法会产出重复的序列。例...
    windliang阅读 205评论 0 0
  • 自己解法 这题解法和全排列类似,只用对同层相同的分支进行剪枝,有点忘了在哪剪了,还是放在后面剪比较好理解,回溯完以...
    justonemoretry阅读 222评论 0 0
  • 题目链接难度:中等 类型: 数组、深度优先搜索 给定一个可包含重复数字的序列,返回所有不重复的...
    wzNote阅读 5,189评论 0 4
  • 题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例1: 思路 1.这道题的思路与 46.全排列...
    youzhihua阅读 101评论 0 0
  • 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 输入: [1,1,2]输出:[[1,1,2],[1...
    埋没随百草阅读 285评论 0 0