ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

679. 24点游戏(dfs)

679. 24点游戏(dfs) 链接679. 24 点游戏题解力扣LeetCode官网 - 全球极客挚爱的技术成长平台class Solution { public: static constexpr int TARGET 24; static constexpr double EPSILON 1e-6; static constexpr int ADD 0, MULTIPLY 1, SUBTRACT 2, DIVIDE 3; bool judgePoint24(vectorint nums) { vectordouble l; for (const int num : nums) { l.emplace_back(static_castdouble(num)); } return solve(l); } bool solve(vectordouble l) { if (l.size() 0) { return false; } if (l.size() 1) { return fabs(l[0] - TARGET) EPSILON; } int size l.size(); // 注意一下i,j下表都是从0开始的 for (int i 0; i size; i) { for (int j 0; j size; j) { if (i ! j) { vectordouble list2 vectordouble(); for (int k 0; k size; k) { if (k ! i k ! j) { list2.emplace_back(l[k]); } } for (int k 0; k 4; k) { // 保证加法和乘法的数字不会重复计算 // 保证数字只与自己后面的下标的数字计算乘法和加法 if (k 2 i j) { continue; } if (k ADD) { list2.emplace_back(l[i] l[j]); } else if (k MULTIPLY) { list2.emplace_back(l[i] * l[j]); } else if (k SUBTRACT) { list2.emplace_back(l[i] - l[j]); } else if (k DIVIDE) { if (fabs(l[j]) EPSILON) { continue; } list2.emplace_back(l[i] / l[j]); } if (solve(list2)) { return true; } list2.pop_back(); } } } } return false; } };class Solution { public: bool judgePoint24(vectorint cards) { if (cards.size() 4) { return false; } std::vectordouble nums(cards.begin(), cards.end()); return calc(nums); } bool calc(const std::vectordouble nums) { if (nums.size() 0) { return false; } if (nums.size() 1) { // 判断是否和24相等 return fabs(nums[0] - 24) 0.000001; } // 从剩余的数字中选择两个数字 for (int i 0; i nums.size(); i) { for (int j 0; j nums.size(); j) { // 不能取取同一个数字 if (i j) { continue; } std::vectordouble next; // 存储非ij位置上的数字 for (int k 0; k nums.size(); k) { if (i ! k j ! k) { next.push_back(nums[k]); } } double num 0; // 对i,j数字进行加减乘除 for (int k 0; k 4; k) { if (k 0) { num nums[i] nums[j]; } else if (k 1) { num nums[i] - nums[j]; } else if (k 3) { num nums[i] * nums[j]; } else { // 被除数非0 if (fabs(nums[j]) 0.000001) { num nums[i] / nums[j]; } } // 添加 next.push_back(num); // 递归下一层 if (calc(next)) { return true; } // 回溯 next.pop_back(); } } } // 返回 return false; } };
返回列表