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 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理技术深度解析与实战指南