第一次从4个数中选2个数,进行运算,得到3个数。
第二次从3个数选2个数,进行运算,得到2个数。
最后一次从2个数选2个数进行运算,得到1个数。
如果这个数等于24就是答案。
注意:这里的除法是浮点数除法,所以要将原数转为浮点数进行运算。同时注意除0异常
实际做的时候,有个小技巧,就是每次新开一个数组,这样就不用进行数组的删除操作。
class Solution {
public:
const double eps = 1e-6;
bool judgePoint24(vector<int>& nums) {
int n = nums.size();
vector<double> newNums(n);
for(int i=0;i<n;i++) newNums[i] = 1.0*nums[i];
return help(newNums);
}
bool help(vector<double> &nums){
if(nums.size()==1){
return (abs(nums[0]-24.0)<eps);
}
for(int i=0;i<nums.size();i++){
for(int j=0;j<nums.size();j++){
if(i!=j){
vector<double> newNums;
for(int k=0;k<nums.size();k++){
if(k!=i&&k!=j) newNums.push_back(nums[k]);
}
newNums.push_back(-1);
double a = nums[i];
double b = nums[j];
newNums.back() = a + b;
if(help(newNums)) return true;
newNums.back() = a - b;
if(help(newNums)) return true;
newNums.back() = a * b;
if(help(newNums)) return true;
if(abs(b)>eps){
newNums.back() = a/b;
if(help(newNums)) return true;
}
}
}
}
return false;
}
};