A Leetcode problem involving Backtracking.
Problem
https://leetcode.com/problems/subsets/
Solution
#include "leetcodeutils.hpp"
using namespace std;
vector<vector<int>> subsetsrec(vector<int>& nums, int index, vector<int>& orig){
vector<vector<int>> retlist;
vector<int> origcopy = orig;
origcopy.push_back(nums[index]);
retlist.push_back(origcopy);
for (int i = index+1; i < nums.size(); i++){
vector<vector<int>> templist = subsetsrec(nums, i, origcopy);
retlist.insert(retlist.end(), templist.begin(), templist.end());
}
return retlist;
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> retlist = { {} };
for (int i = 0; i < nums.size(); i++){
vector<int> empty = {};
vector<vector<int>> templist = subsetsrec(nums, i, empty);
retlist.insert(retlist.end(), templist.begin(), templist.end());
}
return retlist;
}
int main(){
vector<int> a = {1,2,3};
vector<vector<int>> res = subsets(a);
for (int i = 0; i < res.size(); i++){
cout << "[" ;
for (int j = 0; j < res[i].size(); j++){
cout << res[i][j] << ",";
}
cout << "]," ;
}
cout << "\n";
}