(nice!!!)(LeetCode 每日一题) 679. 24 点游戏 (深度优先搜索)

题目:679. 24 点游戏


思路:深度优先搜索dfs,时间复杂度0(n! * 6^n)。

从cards里选两个数,然后枚举所有情况,一共6种,继续dfs,直到cards数量为1。

C++版本:

cpp 复制代码
class Solution {
public:
    const double wc=1e-9;
    bool dfs(vector<double> v){
    	// 数量为1,判断该数是否为24
        if(v.size()==1){
        	// 误差小于wc,说明是24
            return abs(v[0]-24)<wc;
        }
        int n=v.size();
        // 枚举cards里的两位数
        for(int i=0;i<n;i++){
            double x=v[i];
            for(int j=i+1;j<n;j++){
                double y=v[j];
                // 可能进行的操作
                vector<double> f={x+y,x-y,y-x,x*y};
                // 分母不为0
                if(x>wc){
                    f.push_back(y/x);
                }
                if(y>wc){
                    f.push_back(x/y);
                }
                auto new_v=v;
                new_v.erase(new_v.begin()+j);
                // 遍历可能进行的操作
                for(auto z:f){
                    new_v[i]=z;
                    if(dfs(new_v)){
                        return true;
                    }
                }
            }
        }
        return false;
    }

    bool judgePoint24(vector<int>& cards) {
        vector<double> v(cards.begin(),cards.end());
        return dfs(v);
    }
};
相关推荐
saber_andlibert14 分钟前
【C++】——new和delete与malloc和free的区别
c语言·c++
z晨晨19 分钟前
互联网大厂Java求职面试实战:Spring Boot与微服务场景深度解析
java·spring boot·redis·微服务·kafka·spring security·电商
大Mod_abfun24 分钟前
Unity游戏基础-4(人物移动、相机移动、UI事件处理 代码详解)
游戏·ui·unity·游戏引擎
维度攻城狮29 分钟前
C++中的多线程编程及线程同步
开发语言·c++·性能优化·多线程·线程同步
拾光Ծ36 分钟前
【C++哲学】面向对象的三大特性之 多态
开发语言·c++·面试
小欣加油44 分钟前
leetcode 494 目标和
c++·算法·leetcode·职场和发展·深度优先
练习时长一年1 小时前
Bean后处理器
java·服务器·前端
Miki Makimura1 小时前
基于网络io的多线程TCP服务器
网络·c++·学习
野犬寒鸦1 小时前
从零起步学习Redis || 第五章:利用Redis构造分布式全局唯一ID
java·服务器·数据库·redis·分布式·后端·缓存
吹晚风吧1 小时前
SSE是什么?SSE解决什么问题?在什么场景使用SSE?
java·springboot·sse