zoukankan      html  css  js  c++  java
  • 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 点游戏

  • 相关阅读:
    Ios 从无到有项目 MVVM模式(两)
    国外论文搜索
    memcpy的使用方法总结
    简单工厂模式
    curl命令具体解释
    java.lang.Math中的基本方法
    海量数据处理面试题集锦
    BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 文件夹
    TinyXml高速入门(一)
    Android SDK 2.2 离线安装
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/14456095.html
Copyright © 2011-2022 走看看