题解 | # 有重复项数字的全排列 #

有重复项数字的全排列

https://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863?tpId=295&tqId=700&ru=%2Fpractice%2F4bcf3081067a4d028f95acee3ddcd2b1&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295

回溯不好理解,全排列也乱

class Solution {
  public:
    vector<vector<int> > permuteUnique(vector<int> &num) {
      std::vector<std::vector<int>> res;
      std::vector<int> visited(num.size(), 0);
      std::sort(num.begin(), num.end());
      dfs(res, num, visited, std::vector<int>());
      return res;
    }
  private:
    void dfs(std::vector<std::vector<int>> &res, std::vector<int> &num, std::vector<int> &visited, std::vector<int> tmp) {
      if (tmp.size() == num.size()) {
        res.push_back(tmp);
        return ;
      }
      
      for (int i = 0; i < num.size(); ++i) {
        if (visited[i]) {
          continue;
        }
        //  回溯过程遇到相同数字,不用再排
        if (i > 0 && num[i] == num[i - 1] && !visited[i - 1]) {
          continue;
        }
        visited[i] = 1;
        tmp.push_back(num[i]);
        dfs(res, num, visited, tmp);
        tmp.pop_back();
        visited[i] = 0;
      }
    }
};
全部评论

相关推荐

03-11 10:06
已编辑
河南师范大学 C++
点赞 评论 收藏
分享
海螺很能干:每次看到这种简历都没工作我就觉得离谱
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务