679. 24 点游戏

679. 24 点游戏


题目链接:679. 24 点游戏

代码如下:

cpp 复制代码
//参考链接:https://leetcode.cn/problems/24-game/solutions/3756006/mei-ci-he-bing-liang-zhang-pai-di-gui-xi-0sdu
class Solution {
public:
	bool judgePoint24(vector<int>& cards) {
		vector<double> a(cards.begin(),cards.end());
		return dfs(a);
	}

private:
	const double EPS = 1e-9;
	
	bool dfs(vector<double>& cards) {
		int n = cards.size();
		if (n == 1) {
			return abs(cards[0] - 24) < EPS; // 如果只剩一个数,判断是否接近 24
		}

		//选两张牌 x=cartds[i]和y=cards[j],进行四则运算
		for (int i = 0;i < n;i++) {
			double x = cards[i];
			for (int j = i + 1;j < n;j++) {
				double y = cards[j];
			
				//六种情况:加减乘除,其中减和除都有两种不同的顺序
				vector<double> candidates = { x + y,x - y,y - x,x * y };
				if (abs(y) > EPS) {
					candidates.push_back(x / y);
				}
				if (abs(x) > EPS) {
					candidates.push_back(y / x);
				}

				auto new_cards = cards;
				new_cards.erase(new_cards.begin() + j); // 移除第 j 张牌
				for (double res : candidates) {
					new_cards[i] = res; // 将结果放在第 i 张牌的位置
					if (dfs(new_cards)) {
						return true;
					}
				}
			}
		}
		return false; // 如果没有找到满足条件的组合,返回 false
	}
};
相关推荐
j7~30 分钟前
【Linux】二十八.线程篇五《Linux多线程编程:线程同步之条件变量》---详解
linux·运维·c++·学习·条件变量·线程同步
王老师青少年编程30 分钟前
2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷3:文末附答案
c++·答案·模拟题·2026年·青少年信息素养大赛·算法应用主题赛·决赛
程序喵大人37 分钟前
【C++进阶】STL容器与迭代器 - 10 把容器、迭代器和数据流串成一个小程序
开发语言·c++·容器·小程序·迭代器·stl
luj_17681 小时前
随机性在算法与占卜中的共通原理
c语言·开发语言·c++·经验分享·算法
Lazionr1 小时前
vector初识——从动态数组到STL核心容器
开发语言·c++
yyds_yyd_100861 小时前
3731. 找出缺失的元素(2026.08.04)
c++·leetcode
呱呱巨基1 小时前
CMake基础
linux·c++·笔记·学习
Tri_Function13 小时前
动态规划DP1(c++)
c++
清水迎朝阳16 小时前
客户端软件 — 用户统计方案
服务器·c++·客户端·用户统计
再卷也是菜17 小时前
C++17(下)
c++