LeetCode 78. 子集(回溯)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 78. 子集(回溯)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目信息
- 2. 解題
- 2.1 暴力回溯
- 2.2 循環(huán)
- 2.3 位運(yùn)算
1. 題目信息
給定一組不含重復(fù)元素的整數(shù)數(shù)組 nums,返回該數(shù)組所有可能的子集(冪集)。
說(shuō)明:解集不能包含重復(fù)的子集。
示例:輸入: nums = [1,2,3] 輸出: [[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[] ]來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/subsets
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
2.1 暴力回溯
class Solution { public:vector<vector<int>> subsets(vector<int>& nums) {vector<int> sub;vector<vector<int>> ans;bt(nums, sub, ans, 0);return ans;}void bt(vector<int>& nums, vector<int> sub, vector<vector<int>> & ans, int i){if(i == nums.size()){ans.push_back(sub);return;}bt(nums, sub, ans, i+1);//不加入nums[i]sub.push_back(nums[i]);bt(nums, sub, ans, i+1);//加入nums[i]} };or
class Solution { public:vector<vector<int>> subsets(vector<int>& nums) {vector<int> sub;vector<vector<int>> ans;ans.push_back({});bt(nums,sub,ans,0);return ans;}void bt(vector<int>& nums,vector<int> sub, vector<vector<int>> &ans, int i){for(int idx = i; idx < nums.size(); ++idx){sub.push_back(nums[idx]);ans.push_back(sub);bt(nums,sub,ans,idx+1);sub.pop_back();}} };2.2 循環(huán)
2.3 位運(yùn)算
- 對(duì)例子來(lái)講,一共8種情況,對(duì)應(yīng)的二進(jìn)制位:000,001,010,011,100,101,110,111
- 每次內(nèi)層循環(huán),把為1的位對(duì)應(yīng)的數(shù)字取出來(lái),就是所有組合
總結(jié)
以上是生活随笔為你收集整理的LeetCode 78. 子集(回溯)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: NumPy快速入门-- Less 基础/
- 下一篇: plotplay恢复默认设置_手把手解答