从LeetCode 679. 24 Game--C++ 解法--二十四点 到穷举24点所有可能性-24点大全

2023-05-16

从LeetCode 679. 24 Game–C++ 解法–二十四点 到穷举24点所有可能性

此文首发于我的个人博客:zhang0peter的个人博客


LeetCode题解文章分类:LeetCode题解文章集合
LeetCode 所有题目总结:LeetCode 所有题目总结


题目地址:24 Game - LeetCode


ou have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated through *, /, +, -, (, ) to get the value of 24.

Example 1:

Input: [4, 1, 8, 7]
Output: True
Explanation: (8-4) * (7-1) = 24

Example 2:

Input: [1, 2, 1, 2]
Output: False

Note:

  • The division operator / represents real division, not integer division. For example, 4 / (1 - 2/3) = 12.
  • Every operation done is between two numbers. In particular, we cannot use - as a unary operator. For example, with [1, 1, 1, 1] as input, the expression -1 - 1 - 1 - 1 is not allowed.
  • You cannot concatenate numbers together. For example, if the input is [1, 2, 1, 2], we cannot write this as 12 + 12.

这道题目是给指定的4个数字,算二十四点。本来是一道锻炼小学生的口算能力的题,用编程来解决反而比较困难。

最容易想到的方法是穷举,最大的问题在于运算符的优先级,尤其是小括号的存在,使得直接穷举没有那么简单。

但仔细考虑后,还是穷举的解法最现实,C++解法如下:

class Solution {
public:
    bool judgePoint24(vector<int> &nums) {
        sort(nums.begin(), nums.end());
        do {
            if (valid(nums)) return true;
        } while (next_permutation(nums.begin(), nums.end()));
        return false;
    }

private:
    inline bool valid(vector<int> &nums) {
        double a = nums[0], b = nums[1], c = nums[2], d = nums[3];
        if (valid(a + b, c, d) || valid(a - b, c, d) || valid(a * b, c, d) || valid(a / b, c, d)) return true;
        if (valid(a, b + c, d) || valid(a, b - c, d) || valid(a, b * c, d) || valid(a, b / c, d)) return true;
        if (valid(a, b, c + d) || valid(a, b, c - d) || valid(a, b, c * d) || valid(a, b, c / d)) return true;
        return false;
    }

    inline bool valid(double a, double b, double c) {
        if (valid(a + b, c) || valid(a - b, c) || valid(a * b, c) || b && valid(a / b, c)) return true;
        if (valid(a, b + c) || valid(a, b - c) || valid(a, b * c) || c && valid(a, b / c)) return true;
        return false;
    }

    inline bool valid(double a, double b) {
        if (abs(a + b - 24.0) < 0.0001 || abs(a - b - 24.0) < 0.0001 || abs(a * b - 24.0) < 0.0001 ||
            b && abs(a / b - 24.0) < 0.0001)
            return true;
        return false;
    }
};

既然单个24点可以穷举出来,那么所有的解自然可能枚举出来

事实证明现在计算机的运算速度是很快的,即使穷举也能很快算出结果。

Python穷举代码如下:

from operator import truediv, mul, add, sub

def judgePoint24(A):
    if not A:
        return False
    if len(A) == 1:
        return abs(A[0] - 24) < 1e-6
    for i in range(len(A)):
        for j in range(len(A)):
            if i != j:
                B = [A[k] for k in range(len(A)) if i != k != j]
                for op in (truediv, mul, add, sub):
                    if (op is add or op is mul) and j > i: continue
                    if op is not truediv or A[j]:
                        B.append(op(A[i], A[j]))
                        if judgePoint24(B):
                            return True
                        B.pop()
    return False

res = []
l = sorted(list(set(tuple(sorted([i, j, k, z])) for i in range(1, 11) for j in range(1, 11)
                    for k in range(1, 11) for z in range(1, 11))))
for i in l:
    if judgePoint24(i) is True:
        res.append(i)

所有的可能性大全罗列如下,共566种可能性。

1, 1, 1, 8
1, 1, 2, 6
1, 1, 2, 7
1, 1, 2, 8
1, 1, 2, 9
1, 1, 2, 10
1, 1, 3, 4
1, 1, 3, 5
1, 1, 3, 6
1, 1, 3, 7
1, 1, 3, 8
1, 1, 3, 9
1, 1, 3, 10
1, 1, 4, 4
1, 1, 4, 5
1, 1, 4, 6
1, 1, 4, 7
1, 1, 4, 8
1, 1, 4, 9
1, 1, 4, 10
1, 1, 5, 5
1, 1, 5, 6
1, 1, 5, 7
1, 1, 5, 8
1, 1, 6, 6
1, 1, 6, 8
1, 1, 6, 9
1, 1, 7, 10
1, 1, 8, 8
1, 2, 2, 4
1, 2, 2, 5
1, 2, 2, 6
1, 2, 2, 7
1, 2, 2, 8
1, 2, 2, 9
1, 2, 2, 10
1, 2, 3, 3
1, 2, 3, 4
1, 2, 3, 5
1, 2, 3, 6
1, 2, 3, 7
1, 2, 3, 8
1, 2, 3, 9
1, 2, 3, 10
1, 2, 4, 4
1, 2, 4, 5
1, 2, 4, 6
1, 2, 4, 7
1, 2, 4, 8
1, 2, 4, 9
1, 2, 4, 10
1, 2, 5, 5
1, 2, 5, 6
1, 2, 5, 7
1, 2, 5, 8
1, 2, 5, 9
1, 2, 5, 10
1, 2, 6, 6
1, 2, 6, 7
1, 2, 6, 8
1, 2, 6, 9
1, 2, 6, 10
1, 2, 7, 7
1, 2, 7, 8
1, 2, 7, 9
1, 2, 7, 10
1, 2, 8, 8
1, 2, 8, 9
1, 2, 8, 10
1, 3, 3, 3
1, 3, 3, 4
1, 3, 3, 5
1, 3, 3, 6
1, 3, 3, 7
1, 3, 3, 8
1, 3, 3, 9
1, 3, 3, 10
1, 3, 4, 4
1, 3, 4, 5
1, 3, 4, 6
1, 3, 4, 7
1, 3, 4, 8
1, 3, 4, 9
1, 3, 4, 10
1, 3, 5, 6
1, 3, 5, 7
1, 3, 5, 8
1, 3, 5, 9
1, 3, 5, 10
1, 3, 6, 6
1, 3, 6, 7
1, 3, 6, 8
1, 3, 6, 9
1, 3, 6, 10
1, 3, 7, 7
1, 3, 7, 8
1, 3, 7, 9
1, 3, 7, 10
1, 3, 8, 8
1, 3, 8, 9
1, 3, 8, 10
1, 3, 9, 9
1, 3, 9, 10
1, 3, 10, 10
1, 4, 4, 4
1, 4, 4, 5
1, 4, 4, 6
1, 4, 4, 7
1, 4, 4, 8
1, 4, 4, 9
1, 4, 4, 10
1, 4, 5, 5
1, 4, 5, 6
1, 4, 5, 7
1, 4, 5, 8
1, 4, 5, 9
1, 4, 5, 10
1, 4, 6, 6
1, 4, 6, 7
1, 4, 6, 8
1, 4, 6, 9
1, 4, 6, 10
1, 4, 7, 7
1, 4, 7, 8
1, 4, 7, 9
1, 4, 8, 8
1, 4, 8, 9
1, 4, 9, 10
1, 4, 10, 10
1, 5, 5, 5
1, 5, 5, 6
1, 5, 5, 9
1, 5, 5, 10
1, 5, 6, 6
1, 5, 6, 7
1, 5, 6, 8
1, 5, 6, 9
1, 5, 6, 10
1, 5, 7, 8
1, 5, 7, 9
1, 5, 7, 10
1, 5, 8, 8
1, 5, 8, 9
1, 5, 8, 10
1, 5, 9, 9
1, 5, 9, 10
1, 5, 10, 10
1, 6, 6, 6
1, 6, 6, 8
1, 6, 6, 9
1, 6, 6, 10
1, 6, 7, 9
1, 6, 7, 10
1, 6, 8, 8
1, 6, 8, 9
1, 6, 8, 10
1, 6, 9, 9
1, 6, 9, 10
1, 7, 7, 9
1, 7, 7, 10
1, 7, 8, 8
1, 7, 8, 9
1, 7, 8, 10
1, 7, 9, 9
1, 7, 9, 10
1, 8, 8, 8
1, 8, 8, 9
1, 8, 8, 10
2, 2, 2, 3
2, 2, 2, 4
2, 2, 2, 5
2, 2, 2, 7
2, 2, 2, 8
2, 2, 2, 9
2, 2, 2, 10
2, 2, 3, 3
2, 2, 3, 4
2, 2, 3, 5
2, 2, 3, 6
2, 2, 3, 7
2, 2, 3, 8
2, 2, 3, 9
2, 2, 3, 10
2, 2, 4, 4
2, 2, 4, 5
2, 2, 4, 6
2, 2, 4, 7
2, 2, 4, 8
2, 2, 4, 9
2, 2, 4, 10
2, 2, 5, 5
2, 2, 5, 6
2, 2, 5, 7
2, 2, 5, 8
2, 2, 5, 9
2, 2, 5, 10
2, 2, 6, 6
2, 2, 6, 7
2, 2, 6, 8
2, 2, 6, 9
2, 2, 6, 10
2, 2, 7, 7
2, 2, 7, 8
2, 2, 7, 10
2, 2, 8, 8
2, 2, 8, 9
2, 2, 8, 10
2, 2, 9, 10
2, 2, 10, 10
2, 3, 3, 3
2, 3, 3, 5
2, 3, 3, 6
2, 3, 3, 7
2, 3, 3, 8
2, 3, 3, 9
2, 3, 3, 10
2, 3, 4, 4
2, 3, 4, 5
2, 3, 4, 6
2, 3, 4, 7
2, 3, 4, 8
2, 3, 4, 9
2, 3, 4, 10
2, 3, 5, 5
2, 3, 5, 6
2, 3, 5, 7
2, 3, 5, 8
2, 3, 5, 9
2, 3, 5, 10
2, 3, 6, 6
2, 3, 6, 7
2, 3, 6, 8
2, 3, 6, 9
2, 3, 6, 10
2, 3, 7, 7
2, 3, 7, 8
2, 3, 7, 9
2, 3, 7, 10
2, 3, 8, 8
2, 3, 8, 9
2, 3, 8, 10
2, 3, 9, 9
2, 3, 9, 10
2, 3, 10, 10
2, 4, 4, 4
2, 4, 4, 5
2, 4, 4, 6
2, 4, 4, 7
2, 4, 4, 8
2, 4, 4, 9
2, 4, 4, 10
2, 4, 5, 5
2, 4, 5, 6
2, 4, 5, 7
2, 4, 5, 8
2, 4, 5, 9
2, 4, 5, 10
2, 4, 6, 6
2, 4, 6, 7
2, 4, 6, 8
2, 4, 6, 9
2, 4, 6, 10
2, 4, 7, 7
2, 4, 7, 8
2, 4, 7, 9
2, 4, 7, 10
2, 4, 8, 8
2, 4, 8, 9
2, 4, 8, 10
2, 4, 9, 9
2, 4, 9, 10
2, 4, 10, 10
2, 5, 5, 7
2, 5, 5, 8
2, 5, 5, 9
2, 5, 5, 10
2, 5, 6, 6
2, 5, 6, 7
2, 5, 6, 8
2, 5, 6, 9
2, 5, 6, 10
2, 5, 7, 7
2, 5, 7, 8
2, 5, 7, 9
2, 5, 7, 10
2, 5, 8, 8
2, 5, 8, 9
2, 5, 8, 10
2, 5, 9, 10
2, 5, 10, 10
2, 6, 6, 6
2, 6, 6, 7
2, 6, 6, 8
2, 6, 6, 9
2, 6, 6, 10
2, 6, 7, 8
2, 6, 7, 9
2, 6, 7, 10
2, 6, 8, 8
2, 6, 8, 9
2, 6, 8, 10
2, 6, 9, 9
2, 6, 9, 10
2, 6, 10, 10
2, 7, 7, 8
2, 7, 7, 10
2, 7, 8, 8
2, 7, 8, 9
2, 7, 9, 10
2, 7, 10, 10
2, 8, 8, 8
2, 8, 8, 9
2, 8, 8, 10
2, 8, 9, 9
2, 8, 9, 10
2, 8, 10, 10
2, 9, 10, 10
3, 3, 3, 3
3, 3, 3, 4
3, 3, 3, 5
3, 3, 3, 6
3, 3, 3, 7
3, 3, 3, 8
3, 3, 3, 9
3, 3, 3, 10
3, 3, 4, 4
3, 3, 4, 5
3, 3, 4, 6
3, 3, 4, 7
3, 3, 4, 8
3, 3, 4, 9
3, 3, 5, 5
3, 3, 5, 6
3, 3, 5, 7
3, 3, 5, 9
3, 3, 5, 10
3, 3, 6, 6
3, 3, 6, 7
3, 3, 6, 8
3, 3, 6, 9
3, 3, 6, 10
3, 3, 7, 7
3, 3, 7, 8
3, 3, 7, 9
3, 3, 8, 8
3, 3, 8, 9
3, 3, 8, 10
3, 3, 9, 9
3, 3, 9, 10
3, 4, 4, 4
3, 4, 4, 5
3, 4, 4, 6
3, 4, 4, 7
3, 4, 4, 8
3, 4, 4, 9
3, 4, 4, 10
3, 4, 5, 5
3, 4, 5, 6
3, 4, 5, 7
3, 4, 5, 8
3, 4, 5, 9
3, 4, 5, 10
3, 4, 6, 6
3, 4, 6, 8
3, 4, 6, 9
3, 4, 6, 10
3, 4, 7, 7
3, 4, 7, 8
3, 4, 7, 9
3, 4, 7, 10
3, 4, 8, 9
3, 4, 8, 10
3, 4, 9, 9
3, 4, 10, 10
3, 5, 5, 6
3, 5, 5, 7
3, 5, 5, 8
3, 5, 5, 9
3, 5, 6, 6
3, 5, 6, 7
3, 5, 6, 8
3, 5, 6, 9
3, 5, 6, 10
3, 5, 7, 8
3, 5, 7, 9
3, 5, 7, 10
3, 5, 8, 8
3, 5, 8, 9
3, 5, 9, 9
3, 5, 9, 10
3, 5, 10, 10
3, 6, 6, 6
3, 6, 6, 7
3, 6, 6, 8
3, 6, 6, 9
3, 6, 6, 10
3, 6, 7, 7
3, 6, 7, 8
3, 6, 7, 9
3, 6, 7, 10
3, 6, 8, 8
3, 6, 8, 9
3, 6, 8, 10
3, 6, 9, 9
3, 6, 9, 10
3, 6, 10, 10
3, 7, 7, 7
3, 7, 7, 8
3, 7, 7, 9
3, 7, 7, 10
3, 7, 8, 8
3, 7, 8, 9
3, 7, 9, 9
3, 7, 9, 10
3, 7, 10, 10
3, 8, 8, 8
3, 8, 8, 9
3, 8, 8, 10
3, 8, 9, 9
3, 8, 9, 10
3, 8, 10, 10
3, 9, 9, 9
3, 9, 9, 10
3, 9, 10, 10
4, 4, 4, 4
4, 4, 4, 5
4, 4, 4, 6
4, 4, 4, 7
4, 4, 4, 8
4, 4, 4, 9
4, 4, 4, 10
4, 4, 5, 5
4, 4, 5, 6
4, 4, 5, 7
4, 4, 5, 8
4, 4, 5, 10
4, 4, 6, 8
4, 4, 6, 9
4, 4, 6, 10
4, 4, 7, 7
4, 4, 7, 8
4, 4, 7, 9
4, 4, 7, 10
4, 4, 8, 8
4, 4, 8, 9
4, 4, 8, 10
4, 4, 10, 10
4, 5, 5, 5
4, 5, 5, 6
4, 5, 5, 7
4, 5, 5, 8
4, 5, 5, 9
4, 5, 5, 10
4, 5, 6, 6
4, 5, 6, 7
4, 5, 6, 8
4, 5, 6, 9
4, 5, 6, 10
4, 5, 7, 7
4, 5, 7, 8
4, 5, 7, 9
4, 5, 7, 10
4, 5, 8, 8
4, 5, 8, 9
4, 5, 8, 10
4, 5, 9, 9
4, 5, 9, 10
4, 5, 10, 10
4, 6, 6, 6
4, 6, 6, 7
4, 6, 6, 8
4, 6, 6, 9
4, 6, 6, 10
4, 6, 7, 7
4, 6, 7, 8
4, 6, 7, 9
4, 6, 7, 10
4, 6, 8, 8
4, 6, 8, 9
4, 6, 8, 10
4, 6, 9, 9
4, 6, 9, 10
4, 6, 10, 10
4, 7, 7, 7
4, 7, 7, 8
4, 7, 8, 8
4, 7, 8, 9
4, 7, 8, 10
4, 7, 9, 9
4, 7, 9, 10
4, 7, 10, 10
4, 8, 8, 8
4, 8, 8, 9
4, 8, 8, 10
4, 8, 9, 9
4, 8, 9, 10
4, 8, 10, 10
4, 9, 9, 10
5, 5, 5, 5
5, 5, 5, 6
5, 5, 5, 9
5, 5, 6, 6
5, 5, 6, 7
5, 5, 6, 8
5, 5, 7, 7
5, 5, 7, 8
5, 5, 7, 10
5, 5, 8, 8
5, 5, 8, 9
5, 5, 8, 10
5, 5, 9, 9
5, 5, 9, 10
5, 5, 10, 10
5, 6, 6, 6
5, 6, 6, 7
5, 6, 6, 8
5, 6, 6, 9
5, 6, 6, 10
5, 6, 7, 7
5, 6, 7, 8
5, 6, 7, 9
5, 6, 8, 8
5, 6, 8, 9
5, 6, 8, 10
5, 6, 9, 9
5, 6, 9, 10
5, 6, 10, 10
5, 7, 7, 9
5, 7, 7, 10
5, 7, 8, 8
5, 7, 8, 9
5, 7, 8, 10
5, 7, 9, 10
5, 7, 10, 10
5, 8, 8, 8
5, 8, 8, 9
5, 8, 8, 10
5, 9, 10, 10
6, 6, 6, 6
6, 6, 6, 8
6, 6, 6, 9
6, 6, 6, 10
6, 6, 7, 9
6, 6, 7, 10
6, 6, 8, 8
6, 6, 8, 9
6, 6, 8, 10
6, 6, 9, 10
6, 7, 7, 10
6, 7, 8, 9
6, 7, 8, 10
6, 7, 9, 9
6, 7, 10, 10
6, 8, 8, 8
6, 8, 8, 9
6, 8, 8, 10
6, 8, 9, 9
6, 8, 9, 10
6, 9, 9, 10
6, 10, 10, 10
7, 7, 9, 10
7, 8, 8, 9
7, 8, 8, 10
7, 8, 9, 10
7, 8, 10, 10
8, 8, 8, 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从LeetCode 679. 24 Game--C++ 解法--二十四点 到穷举24点所有可能性-24点大全 的相关文章

  • 球的表面积公式是怎么推导出来的?

    球的体积公式的推导 球的表面积公式是 xff1a 证明方式一 xff1a 体积求导 基本思路 xff1a 可以把半径为R的球 xff0c 从球心到球表面分成n层 xff0c 每层厚为 r n xff0c 像洋葱一样 半径获得增量是 r xf
  • ViewBinding简单使用

    官方文档 xff1a https developer android google cn topic libraries view binding hl 61 zh cn java 在app module下的build gradle文件中
  • Android广播实现进程间通信,很简单

    应用A发送广播 xff1a span class token keyword public span span class token keyword class span span class token class name MainA
  • 下载JDK8 JVM源码

    性子急的可以直接看快速下载步骤 xff1a 目录 详细步骤快速下载步骤 详细步骤 打开openJDK官网 xff1a https openjdk org 找到左侧的Mercurial xff0c 点击进入新界面 选择jdk8 xff0c 点
  • Git查看分支的创建人

    开发小组人多的时候 xff0c 仓库里会有跟多分支 xff0c 需要看下某个分支具体是谁创建的 命令 xff1a git for each ref format 61 39 committerdate 09 authorname 09 re
  • kotlin的this关键字几种用法

    与java不同的是 xff0c 原先MainActivity this这种写法在kotlin中会报错 如下 正确的写法有许多 xff0c 直接就写this也可以识别到 xff0c 如下 xff1a span class token clas
  • kotlin中匿名内部类的写法

    原本java开发安卓常用的setOnClickListener xff0c 用kotlin写 xff0c 也变得五花八门了 span class token keyword var span view span class token op
  • Spring与SpringMVC的区别和联系是啥?

    Spring Spring是一个开源容器框架 xff0c 可以接管web层 xff0c 业务层 xff0c dao层 xff0c 持久层的组件 xff0c 并且可以配置各种bean 和维护bean与bean之间的关系 其核心就是控制反转 I
  • “在XML文件中给代码加注释”请注意注释的位置

    先科普一下eclipse加注释的快捷键 xff1a eclipse中编辑Java文件时 xff0c 注释和取消注释的快捷键都是 xff1a 34 CTRL 43 34 编辑xml文件时 xff0c 注释 xff1a CTRL 43 SHIF
  • HTTP代理服务器的实现

    接下来都是我对HTTP代理服务器的理解 HTTP代理服务 xff08 proxy server xff09 器就是客户端也是服务端 xff0c 是一个事务处理的中间人 xff0c 就像下图所展示的一样 xff0c 图片来源于 HTTP权威指
  • “无法识别的USB设备”如何解决

    昨天 xff0c 我把USB数据线插入笔记本电脑做真机调试 xff0c 电脑右下角提示显示 无法识别的USB设备 xff0c 我开始百度 xff08 还不会搭梯子用google xff09 xff0c 搜索结果大多说是要更新驱动 xff0c
  • 解决Android studio 模拟器闪烁黑屏问题

    首先 xff0c 必须感谢csdn大神给我的启示 xff0c 但是原文并没有解决我的问题 我在看 第一行代码 的时候 xff0c 跟着郭霖大神的思路 xff0c 想利用cmd命令查看虚拟机中的 db文件中的数据表 因为真机需要root才能查
  • Android studio如何更改应用程序的图标以及名称

    如何在Android studio中更改应用程序的图标和名称是很多初学者遇到的问题之一 xff0c 今天我就来给大家讲一下简单的步骤 1 更改图标 首先选中我们需要更改的工程 xff0c 然后new gt Image Asset 就来到了更
  • Matlab中矩阵的合并、某行某列的删除、矩阵大小的改变(完整的函数调用表)、矩阵元素的访问

    矩阵的合并 矩阵的合并就是把两个或两个以上的矩阵合并成一个新的矩阵 可用于构造矩阵 xff0c 也可用于合并矩阵 c 61 A B 就是在水平方向上合并矩阵A和矩阵B c 61 A B 就是在竖直方向上合并矩阵A和矩阵B 如下 xff1a
  • Matlab里for循环详解

    for循环用来重复指定次数 xff0c 由于for 循环变量 end组成 例1 xff1a span class token keyword for span i span class token operator 61 span span
  • 定时关机

    include 34 stdafx h 34 include lt windows h gt include lt windowsx h gt include lt shellapi h gt include 34 resource h 3
  • Android设置Settings:PreferenceFragment【4】

    Android设置Settings xff1a PreferenceFragment 4 最新的android谷歌官方设计文档指出 xff0c 在后续的Android开发中 xff0c 应尽量使用PreferenceFragment而不是P
  • Centos ansible部署,启动服务失败

    出现错误 xff1a Unable to enable service nginx Failed to execute operation Cannot send after transport endpoint shutdown解决方法
  • 抢红包算法--四种抢红包算法对比(附源码)

    还记着longlong ago 我还在做绿色征途手游版的时候 有天 策划同学要求同事 一定要优化下抢红包算法 本着划水第一 吃瓜并列第一的原则 于是 我听到了一堆数学名词 定理 XXX公式 呼 是我不配了 怪我没有好好学习 再仔细听一听 问
  • 抢红包算法--四种抢红包算法对比

    线上测试服务器中 xff0c 有个同事做的抢红包算法被要求优化 xff0c 大概听了下他们的讨论 xff0c 最后的结果竟然要用什么概率论等等一系列我听过的 没听过的名词去解决 我表示一脸懵 其实解决的问题就是一个 xff1a 抢红包算法不

随机推荐