LeetCode 679: 24 Game 解题与思考

来源:互联网 发布:飞秋for mac 编辑:程序博客网 时间:2024/06/10 17:47

#LeetCode 679: 24 Game 解题与思考

[原题链接]

题目描述

就是24点啦,给你四个数字,判断能否得出24点

思路

没得讲,直接枚举
看起来真的挺荒谬:不过仔细想想,4个数字全排列24种可能,3个符号64种可能,对称重复除以2,总共也不超过24 × 64 ÷2 = 768种可能;考虑加法和乘法的交换,情况还要更少一点

算法

枚举也没什么算法可言了

代码

#include <iostream>#include <vector>#include <math.h>using namespace std;class Solution {    bool jp2(double a, double b) {        return (abs(a + b - 24) < 1e-10) || (abs(a - b - 24) < 1e-10) || (abs(a * b - 24) < 1e-10) || (b != 0 && (abs(a / b - 24) < 1e-10)) || (abs(b - a - 24)<1e-10) || (a != 0 && (abs(b / a - 24)<1e-10));    }    bool jp3(double a, double b, double c) {        return jp2(a + b, c) || jp2(a - b, c) || jp2(a * b, c) || (b != 0 && jp2(a / b, c)) || jp2(b - a, c) || (a != 0 && jp2(b / a, c)) \            || jp2(c + b, a) || jp2(c - b, a) || jp2(c * b, a) || (b != 0 && jp2(c / b, a)) || jp2(b - c, a) || (c != 0 && jp2(b / c, a)) \            || jp2(a + c, b) || jp2(a - c, b) || jp2(a * c, b) || (c != 0 && jp2(a / c, b)) || jp2(c - a, b) || (a != 0 && jp2(c / a, b));    }public:    bool judgePoint24(vector<int>& nums) {        double a = nums[0], b = nums[1], c = nums[2], d = nums[3];        return jp3(a + b, c, d) || jp3(a - b, c, d) || jp3(a * b, c, d) || (b != 0 && jp3(a / b, c, d)) || jp3(b - a, c, d) || (a != 0 && jp3(b / a, c, d)) \            || jp3(c + b, a, d) || jp3(c - b, a, d) || jp3(c * b, a, d) || (b != 0 && jp3(c / b, a, d)) || jp3(b - c, a, d) || (c != 0 && jp3(b / c, a, d)) \            || jp3(a + c, b, d) || jp3(a - c, b, d) || jp3(a * c, b, d) || (c != 0 && jp3(a / c, b, d)) || jp3(c - a, b, d) || (a != 0 && jp3(c / a, b, d)) \            || jp3(a + d, c, b) || jp3(a - d, c, b) || jp3(a * d, c, b) || (d != 0 && jp3(a / d, c, b)) || jp3(d - a, c, b) || (a != 0 && jp3(d / a, c, b)) \            || jp3(d + b, a, c) || jp3(d - b, a, c) || jp3(d * b, a, c) || (b != 0 && jp3(d / b, a, c)) || jp3(b - d, a, c) || (d != 0 && jp3(b / d, a, c)) \            || jp3(d + c, b, a) || jp3(d - c, b, a) || jp3(d * c, b, a) || (c != 0 && jp3(d / c, b, a)) || jp3(c - d, b, a) || (d != 0 && jp3(c / d, b, a));    }};

思考

一开始我还想着怎么去更快地得到解答,但是想了想反正也不需要给出如何得到24点,只需要判断,所以就枚举了