-
分析
递归回溯,judge函数的含义是对cards中的数据做满足题目的操作是否可以得到24(添加cards.size() - 1个运算符),有顺序的取出两个数进行操作,然后把这两个数操作的结果放到新的vector里面。递归调用judge。面试高频题 -
代码
class Solution {
public:
bool judgePoint24(vector<int>& cards) {
vector<double> vec(cards.begin(), cards.end());
return judge(vec);
}
bool judge(vector<double>& cards){
int size = cards.size();
if(size == 1){
if(abs(cards[0] - 24) < pow(10, -6)) return true;
return false;
}
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
if(i == j) continue;
vector<double> temp;
for(int k = 0; k < size; k++){
if(k != i && k != j){
temp.push_back(cards[k]);
}
}
for(int k =0; k < 4; k++){
//0+,1-,2*,3/
if(k == 0){
if(i > j) continue;
temp.push_back(cards[i] + cards[j]);
}else if(k == 1){
temp.push_back(cards[i] - cards[j]);
}else if(k == 2){
if(i > j) continue;
temp.push_back(cards[i] * cards[j]);
}else if(k == 3){
temp.push_back(cards[i] / cards[j]);
}
if(judge(temp)){
return true;
}
temp.pop_back();
}
}
}
return false;
}
};