美文网首页
组合问题-子集

组合问题-子集

作者: 1哥 | 来源:发表于2023-08-26 23:29 被阅读0次

    题目一
    给出一个数组 list = [1,2,3,4,5,6]
    求此数组的所有子集合
    输出:[1],[1,2],[1,2,3]…
    位运算法
    2^n 种子集合:每种子集合中每一个bit 代表 数组中index 对应的元素是否在子集合中。
    遍历每个2^n 中情况,通过对应的数值,获取对于的元素,然后push_back 到vector 数组中。

        vector<vector<int>> subsets(vector<int>& nums) {
            vector<vector<int>> result; //开辟二维数组
            int all_set = 1 << nums.size(); //所有的可能数 +1
    
            for(int i = 0; i < all_set; i++){
                vector<int> item; //开辟一维数组
                for(int j = 0; j < nums.size(); j++){
                    if(i & (1 << j)){ //某位置元素是否存在的条件
                        item.push_back(nums[j]);
                    }
                }
                result.push_back(item);
            }
            return result;
        }
    

    题目二
    给出一个数组 list = [1,2,3,4,5,6]
    求此数组的所有子集合中和为6的子集
    输出:[6,[2,4],[1,5],[1,2,3]
    解题思路:

        vector<vector<int>> subsets(vector<int>& nums, int target ) {
            vector<vector<int>> result; //开辟二维数组
            int all_set = 1 << nums.size(); //所有的可能数 +1
    
            for(int i = 0; i < all_set; i++){
                vector<int> item; //开辟一维数组
                int sum = 0;
                for(int j = 0; j < nums.size(); j++){
                    if(i & (1 << j)){ //某位置元素是否存在的条件
                        item.push_back(nums[j]);
                        sum += nums[j];
                    }
                }
                if (sum == target)
                  result.push_back(item);
       
            }
            return result;
        }
    

    相关文章

      网友评论

          本文标题:组合问题-子集

          本文链接:https://www.haomeiwen.com/subject/ztbimdtx.html