AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

LeetCode 47. LeetCode 47 全排列 II    原题链接    中等

作者: 作者的头像   子沐- ,  2019-10-26 22:05:09 ,  所有人可见 ,  阅读 749


0


题目描述

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

样例

示例:

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

dfs

class Solution { // 代码参考yxc
public:
    vector<vector<int>> ans;
    vector<int> path;
    vector<bool> st;
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        st = vector<bool>(nums.size(),false);
        path = vector<int>(nums.size());
        dfs(nums, 0, 0);
        return ans;
    }

    void dfs(vector<int>& nums, int u, int start){
        if(u == nums.size()) // u 表示当前位置  start 表示从哪里开始枚举数字
        {
            ans.push_back(path);
            return;
        }

        for(int i=start;i<nums.size();i++)
        {
            if(!st[i])
            {
                st[i] = true;
                path[i] = nums[u];
                if(u+1<nums.size() && nums[u+1]!=nums[u]) // 如果下一个数字和当前数字不重复,则从0开始
                    dfs(nums, u+1, 0);
                else dfs(nums,u+1,i+1); // 下一个数字和当前数字重复,人为排序,从下一个开始
                st[i] = false;

            }
        }
    }
};

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息