ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

给定一组不同的整数(nums),返回CPP中的所有可能子集

前开发者教程 2018年9月1日

注意: 解决方案集不得包含重复的子集。

Example:
Input: nums = [1,2,3]
Output:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

该问题可以通过两种方式解决:

  1. 迭代式
  2. 回溯

 

解决方案1:迭代解决方案。

在此解决方案中,我们采用2个循环,即外循环和内循环。然后,我们开始迭代添加元素。

以[1、2、3]为例,迭代过程如下:

最初设置:[[]]

第一次迭代后,子集将为:[[],[1]];

在第二次迭代之后,子集将为:[[],[1],[2],[1、2]];

在第三次迭代之后,子集将为:[[],[1],[2],[1、2],[3],[1、3],[2、3],[1、2、3 ]]。

 

C ++解决方案

#include<iostream>
#include<vector>

using namespace std;

vector<vector<int>> get_subsets_iterative(vector<int>& input_set) 
{
  vector<vector<int>> result_set(1, vector<int>());

  for (int i = 0; i < input_set.size(); i++) 
  {
    int n = result_set.size();
    for (int j = 0; j < n; j++) 
    {
      result_set.push_back(result_set[j]); 
      result_set.back().push_back(input_set[i]);
    }
  }
  return result_set;
}


void subsets(vector<int>& nums, int start, vector<int>& temp, vector<vector<int>>& final_set) 
{
  final_set.push_back(temp);
  for (int i = start; i < nums.size(); i++) 
  {
    temp.push_back(nums[i]);
    subsets(nums, i + 1, temp, final_set);
    temp.pop_back();
  }
}


vector<vector<int>> get_subsets_backtrack(vector<int>& nums) 
{
  vector<vector<int>> final_set;
  vector<int> temp;
  subsets(nums, 0, temp, final_set);
  return final_set;
}



int main()
{
  vector<int> input_set = {1, 2, 3};

  //vector< vector<int> >result = get_subsets_iterative(input_set);
  vector< vector<int> >result = get_subsets_backtrack(input_set);



  for (int i = 0; i < result.size(); i++)
  {
    for (int j = 0; j < result[i].size(); j++)
    {
      cout<< result[i][j]<<" ";
    }
    cout<<endl;
  }
}

输出:

1
2
1 2
3
1 3
2 3
1 2 3

 

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的




                <rt id="VtTlRZ1"><tr id="S2WrgSZ" class="Sbx2m0d"><dl class="ApRA61H"></dl></tr></rt>
                <sup class="zl8KUNr"></sup>

                <footer id="TNwBsEC"></footer>