leetcode78 子集
給你乙個整數陣列 nums ,陣列中的元素 互不相同 。返回該陣列所有可能的子集(冪集)。
解集 不能 包含重複的子集。你可以按 任意順序 返回解集。
1.二進位制
假設乙個集合為a = ,那麼我們用三位二進位制數表示選擇的集合元素下標。
0/1序列
子集000
{}001
010100
011101
110111
可見,對於有n個元素的集合,共有2n2^
2n個子集,於是我們可以列舉
所有可能
class
solution
} ans.
push_back
(t);
}return ans;}}
;//注:這裡二進位制數的第j位是從右往左數,但是集合的第j個元素是從左往右數,
//所以對於a=,得到前幾個子集是,,而非,,
2.backtrack(回溯)
寫乙個函式void dfs(int cur,vectornums)
表示遍歷到nums[cur]
對於第cur個元素是否在子集內,有兩種選擇,第一種是子集包含nums[cur],第二種是不包含該元素。
若包含該元素,**為:
t.
push_back
(nums[cur]
)dfs
(cur+
1,nums)
t.pop_back()
;
若不包含該元素,則直接dfs(cur+1,nums)
整體dfs如下
class
solution
t.push_back
(nums[cur]);
dfs(cur +
1, nums)
; t.
pop_back()
;dfs
(cur +
1, nums);}
vectorint>>
subsets
(vector<
int>
& nums)
};
3.新增子集法
對於將要遍歷的第cur個元素,將其加入已經形成的所有子集中,變成cur個新子集
class
solution
}return res;}}
;
用遞迴方法求集合的子集
用遞迴的方法求乙個集合的子集。實現 如下 include include include define n 20 int used n void output char str int diver char str,int len,int index int main void input strl...
C 3的分部方法
作用是乙個可選的鉤子,如果沒有實現,則不會有任何的開銷。比如 myform.cs partial class myform public myform partial void custominitialize partial void setup myformhandwritten.cs part...
C 3種繼承的區別
從下面的圖可以看出!繼承類中的成員,對3種屬性的訪問都是一樣的,都能訪問父類中的public和proteced,但是不能訪問private 繼承類產生的物件,除了公有繼承可以訪問public,其他2個繼承,物件都不能訪問父類的成員。保護成員和私有成員的區別就在於 保護繼承中的變化!公有繼承 物件訪問...