遇到这种问题,建模是关键,想清楚怎么构建模型。
class Solution {
public:
bool solve(vector<float> &nums){
if(nums.size() == 1) return abs(nums[0] - 24.0) < 1e-5;
for(int i=0; i<nums.size(); i++){
for(int j=0; j<nums.size(); j++){
if(i == j) continue;
vector<float> nums2;
for(int k=0; k<nums.size(); k++){
if(k != i && k != j)
nums2.push_back(nums[k]);
}
for(int o=0; o<4; o++){
vector<float> nums3;
nums3.insert(nums3.end(), nums2.begin(), nums2.end());
if(o < 2 && j > i) continue;
if(o == 0) nums3.push_back(nums[i] + nums[j]);
if(o == 1) nums3.push_back(nums[i] * nums[j]);
if(o == 2) nums3.push_back(nums[i] - nums[j]);
if(o == 3) nums3.push_back(nums[i] / nums[j]);
if(solve(nums3))
return true;
}
}
}
return false;
}
bool judgePoint24(vector<int>& nums) {
vector<float> fnums;
for(auto n: nums) fnums.push_back(float(n));
return solve(fnums);
}
};
本文介绍了一种解决24点游戏问题的递归算法。通过构建递归模型,利用加、减、乘、除四种运算操作,从一组整数出发,判断是否能通过运算得到24这个数值。算法采用C++实现,详细展示了如何遍历所有可能的运算组合。
1987

被折叠的 条评论
为什么被折叠?



