24点游戏
- 该题目本质是暴力搜索
比较简单的暴力搜索顺序为,从4个数中任选两个数进行四种不同的运算,进入下层搜索,知道只剩下最后的结果
class Solution {
public:
// 这里要注意的是,其实不在乎res的顺序,因为我们都是要在下层循环全排列的
vector<double> calculate(vector<double> &nums, int i, int j, double x) {
vector<double> res;
for (int k = 0; k < nums.size(); k ++) {
if (k != i && k != j) {
res.push_back(nums[k]);
}
}
res.push_back(x);
return res;
}
bool dfs(vector<double> nums) {
if (nums.size() == 1) {
return fabs(nums[0] - 24) < 1e-8;
}
// 选择两个位置进行运算
for (int i = 0; i < nums.size(); i ++) {
for (int j = 0; j < nums.size(); j ++) {
if (i == j) {
continue;
}
double a = nums[i], b = nums[j];
// 该位置可能的4种运算
if (dfs(calculate(nums, i, j, a + b))) return true;
if (dfs(calculate(nums, i, j, a - b))) return true;
if (dfs(calculate(nums, i, j, a * b))) return true;
if (dfs(calculate(nums, i, j, a / b))) return true;
}
}
return false;
}
bool judgePoint24(vector<int>& nums) {
vector<double> a(nums.begin(), nums.end());
return dfs(a);
}
};