基本版(超时) :
class Solution {
public:
int largestCombination(vector<int>& candidates) {
int ans = 1;
// 先排序
sort(begin(candidates), end(candidates));
// 将所有元素放入递归队列
for(int i = 0; i < candidates.size(); i++){
int cal = candidates[i];
recursive(i + 1, 1, cal, &ans, candidates);
}
return ans;
}
void recursive(int ind, int len, int num, int *ans, vector<int> &vec){
// 获取最大值
*ans = max(*ans, len);
// 递归结束条件
if(ind >= vec.size()){
return;
}
// 继续放入递归队列
for(int i = ind; i < vec.size(); ){
int cal = (num & vec[i]);
// 如果已经为0直接跳出循环
if(cal == 0){
i++;
continue;
}
// 默认的递增为1
int add = 1;
// 如果存在相同的直接跳过,记录累加数
while(i + add < vec.size() && vec[i + add] == vec[i]){
add++;
}
recursive(i + add, len + add, cal, ans, vec);
i += add;
}
return;
}
};
优化参考版:TODO