LeetCode 679: 24 Game 解题与思考

#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点,只需要判断,所以就枚举了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值