LeetCode 679. 24点游戏

思路#

 

复制代码
 1 class Solution {
 2 public:
 3     bool judgePoint24(vector<int>& nums) {
 4         vector<double> digits;
 5         for (int num : nums) {
 6             digits.push_back((double)num);
 7         }
 8         return backTracking(digits);
 9     }
10 
11     bool backTracking(vector<double> digits) {
12         int n = digits.size();
13         if (n == 1) {
14             return abs(digits[0] - 24) < 0.001;
15         }
16         for (int i = 0; i < n - 1; i++) {
17             for (int j = i + 1; j < n; j++) {
18                 vector<double> newDigits;
19                 for (int k = 0; k < n; k++) {
20                     if (k == i || k == j) continue;
21                     newDigits.push_back(digits[k]);
22                 }
23                 // 标识变量isValid初始为 false,默认会执行||后面的递归。
24                 // 一旦某个递归返回真,isValid就变为真,由于||的短路特性,后面的递归不会执行
25                 bool valid = false;
26                 // 加法
27                 newDigits.push_back(digits[i] + digits[j]);
28                 valid = valid || backTracking(newDigits);
29                 newDigits.pop_back();
30                 // 减法
31                 newDigits.push_back(digits[i] - digits[j]);
32                 valid = valid || backTracking(newDigits);
33                 newDigits.pop_back();
34                 newDigits.push_back(digits[j] - digits[i]);
35                 valid = valid || backTracking(newDigits);
36                 newDigits.pop_back();
37                 // 乘法
38                 newDigits.push_back(digits[i] * digits[j]);
39                 valid = valid || backTracking(newDigits);
40                 newDigits.pop_back();
41                 // 除法
42                 if (digits[j] != 0) {
43                     newDigits.push_back(digits[i] / digits[j]);
44                     valid = valid || backTracking(newDigits);
45                     newDigits.pop_back();
46                 }
47                 if (digits[i] != 0) {
48                     newDigits.push_back(digits[j] / digits[i]);
49                     valid = valid || backTracking(newDigits);
50                     newDigits.pop_back();
51                 }
52                 if (valid) return true;
53             }
54         }
55         return false;
56     }
57 };
复制代码

 

 

 

 

原文#

递归回溯,考察基本功 | 679. 24点游戏

LeetCode官方题解 - 24 点游戏

posted @   拾月凄辰  阅读(73)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示
主题色彩