leetcode-90-Subsets II

問題

題目:[leetcode-90]

思路

上一目的題目需要兩個條件:
1.必須是升序
2.試探過的元素不能反覆試探
3. 如果是相同的元素,同一個位置不能由多個相同元素試探。但是要注意,如果相同元素已經試探了別的位置,那麼這個位置不可能由相同元素試探。即使元素相同。

代碼

class Solution {
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<int> arr;
        vector<vector<int>> ret;
        ret.push_back(arr);
        set<int> visited;

        dfs( arr, visited, nums, nums.size(), ret );
        return ret;
    }
private:
    void dfs(vector<int>& arr, set<int>& visited, vector<int>& nums, int n, vector<vector<int>>& ret ){
        if( arr.size() == n ) return;
        else{
            for(int i = 0; i < n; ++i){
                if( visited.find(i) != visited.end() ) continue;
                int sz = arr.size();
                bool flag = true;
                for( int k = 0; k < sz; ++k ){
                    if( arr[k] > nums[i] ){ flag = false; break; }
                }
                if(!flag) continue;
                flag = true;
                for(int j = 0; j < i; ++j){
                    if(nums[j] == nums[i] && visited.find(j) == visited.end() ){ flag = false; break; }
                }
                if(!flag) continue;

                arr.push_back( nums[i] );
                visited.insert( i );
                ret.push_back(arr);
                dfs( arr, visited, nums, n, ret );
                arr.pop_back();
                visited.erase(i);
            }
        }
    }
};
發佈了356 篇原創文章 · 獲贊 43 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章