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);}};
