不同题目只需要解除相应的define注释即可
力扣78 子集
力扣77 组合
力扣46 全排列
#define SUBSET 1 // 子集//#define COMBINE 1 // 组合//#define PERMUTATION 1 // 全排列vector> res;int ck = -1;unordered_map used;void dfs(vector& path, vector& set, int index){int start = -1;#ifdef SUBSET // 子集res.push_back(path);start = index;// start == set.size() 时,不会进入循环#elif COMBINE // 组合: 所有可能的ck个数的组合。是子集的一部分if (path.size() == ck){res.push_back(path);return;}start = index;#elif PERMUTATION // 全排列: 所有可能的全排列if (path.size() == set.size()){res.push_back(path);return;}start = 0;#endif for (int i = start; i < set.size(); ++i){#ifdef PERMUTATIONif (used[set[i]])continue;#endifpath.push_back(set[i]);#ifdef PERMUTATIONused[set[i]] = true;#endifdfs(path, set, i + 1);path.pop_back();#ifdef PERMUTATIONused[set[i]] = false;#endif}}vector> fun(vector set){#ifdef PERMUTATIONfor (int i = 0; i < set.size(); ++i){used[set[i]] = false;}#endifvector path;dfs(path, set, 0);return res;}