程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> leetcode筆記:Subsets II

leetcode筆記:Subsets II

編輯:關於C++

一. 題目描述

Given a collection of integers that might contain duplicates, nums, return all possible subsets.

Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution is:

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

二. 題目分析

該題相比Subsets一題略有不同,該題在給定的數組中,允許出現重復的元素。但最後輸出的排列不能有重復的組合。因此,在DFS時,使用一個數組temp來記錄某個數是否被使用過即可。

三. 示例代碼

#include 
#include 

using namespace std;

class Solution {
public:
    vector > subsetsWithDup(vector nums) {
        sort(nums.begin(), nums.end());
        subsets(nums, 0);
        return result;
    }

private:
    vector temp;
    vector > result;

    void subsets(vector nums, int index){
        if(index == nums.size()) 
        { 
            result.push_back(temp);
            return;
        }
        if(temp.size() == 0 || temp[temp.size()-1] != nums[index])
            subsets(nums, index + 1);    
        temp.push_back(nums[index]);
        subsets(nums, index + 1);
        temp.pop_back();
    }
};

四. 小結

該題需要注意的地方是,避免出現同樣的排列組合。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved