Loading

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 @ 2021-02-27 16:06  拾月凄辰  阅读(71)  评论(0编辑  收藏  举报