24点游戏679

题目描述:
给定一个长度为4的整数数组 cards 。你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的
数字。您应该使用运算符 ['+', '-', '*', '/'] 和括号 '(' 和 ')' 将这些卡片上的数字排
列成数学表达式,以获得值24。

你须遵守以下规则:
(1)除法运算符 '/' 表示实数除法,而不是整数除法。
     例如, 4 /(1 - 2 / 3)= 4 /(1 / 3)= 12 。
(2)每个运算都在两个数字之间。特别是,不能使用 “-” 作为一元运算符。
     例如,如果 cards =[1,1,1,1] ,则表达式 “-1 -1 -1 -1” 是 不允许 的。
(3)你不能把数字串在一起
     例如,如果 cards =[1,2,1,2] ,则表达式 “12 + 12” 无效。
如果可以得到这样的表达式,其计算结果为 24 ,则返回 true ,否则返回 false。


输入: cards = [4, 1, 8, 7]
输出: true
解释: (8-4) * (7-1) = 24

输入: cards = [1, 2, 1, 2]
输出: false

cards.length == 4
1 <= cards[i] <= 9

way:一开始有4个数字,按顺序选出2张A42,有12种顺序,然后将拿出的2张牌做4种运算中的一种运算得到一个结果牌,此时加上剩下的2张牌,还有3张牌,然后从3张牌有A32,6种顺序拿出2张牌做4种运算中的一种得到一个结果牌,此时加上剩下的1张牌,还有2张牌,最后这2张牌有A22的2种顺序进行4种运算中的一种运算,得到最后的结果牌,如果最后得到的结果是24,那么就可以,否则不能。为什么是A42而不是C42这种方式拿牌呢,因为除法和减法运算与数的运算顺序是有关的,所以要有顺序的拿,然后为了防止A+B,A*B, 与B+A,B * A 这样得到重复的运算结果,所以加了判断去除重复。12*6*2*4*4*4=9216种可能性。

我觉得此题的关键之处在于知道怎样去选牌,去选运算,减少到最后一个结果值,没那么难的啦!

看看别人说的多好!

#define ADD 0
#define SUB 1
#define MUL 2
#define DIV 3
double EPLISION =1e-6;

class Solution {
public:
    bool solve(vector<double>& cards)
    {
        if(cards.size()==0 ) return false;
        if(cards.size()==1)  return abs(cards[0]-24)<EPLISION;
        int n = cards.size();
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
            {
                //顺序的选2个数
                if(i!=j)
                {
                    vector<double>nums;
                    for(int x=0; x<n; x++)
                    {
                        //将除了运算的2个数之外的其他数字push进nums中
                        if(x!=i && x!=j)
                        {
                            nums.push_back(cards[x]);
                        }
                    }
                    //从4种运算中选取一种运算
                    for(int op=0; op<4; op++)
                    {
                        if((op==ADD || op == MUL) && j>i) continue;
                        if(op == ADD)
                        {
                            nums.push_back(cards[i]+cards[j]);
                        }else if(op == SUB)
                        {
                            nums.push_back(cards[i]-cards[j]);
                        }else if(op == MUL)
                        {
                            nums.push_back(cards[i]*cards[j]);
                        }else
                        {
                            //除数是0时,continue掉
                            if(abs(cards[j])<EPLISION) continue;
                            nums.push_back(cards[i]/cards[j]);
                        }
                        if(solve(nums)) return true;
                        //去除当前选择的运算结果
                        nums.pop_back();
                    }
                }
            }
        }
        return false;

    }

    bool judgePoint24(vector<int>& cards) {
        vector<double>cards2;
        for(int i=0; i<cards.size(); i++)
        {
            cards2.push_back((double)cards[i]);
        }
        return solve(cards2);
    }
};

时间复杂度:O(1)。一共有 9216 种可能性,对于每种可能性,各项操作的时间复杂度都是 O(1),因此总时间复杂度是 O(1)。

空间复杂度:O(1)。空间复杂度取决于递归调用层数与存储中间状态的列表,因为一共有 4个数,所以递归调用的层数最多为 4,存储中间状态的列表最多包含 4个元素,因此空间复杂度为常数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/625204.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型日报#0514:OpenAI GPT-4o震撼发布、我是如何赢得GPT-4提示工程大赛冠军的

导读&#xff1a;欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。《AI大模型日报》今日要点&#xff1a;OpenAI在春季新品发布会上推出全能模型GPT-4o及桌面App&#xff0c;颠覆科技界。GPT-4o…

Pytorch学习-引言

Pytorch相关链接 Pytorch官方网站 https://pytorch.org/ Pytorch的Github仓库 https://github.com/pytorch/pytorch Pytorch论坛 https://discuss.pytorch.org/ Pytorch离线下载包链接 https://download.pytorch.org/whl/torch_stable.html Pytorch学习视频推荐链接 http://【…

C++类与对象基础探秘系列(二)

目录 类的6个默认成员函数 构造函数 构造函数的概念 构造函数的特性 析构函数 析构函数的概念 析构函数的特性 拷贝构造函数 拷贝构造函数的概念 拷贝构造函数的特性 赋值运算符重载 运算符重载 赋值运算符重载 const成员 const修饰类的成员函数 取地址及const取地址操作…

C++系统编程篇——Linux初识(系统安装、权限管理,权限设置)

(1)linux系统的安装 双系统---不推荐虚拟机centos镜像&#xff08;可以使用&#xff09;云服务器/轻量级云服务器&#xff08;强烈推荐&#xff09; ①云服务器&#xff08;用xshell连接&#xff09; ssh root公网IP 然后输入password ①添加用户&#xff1a; addus…

如何去掉试卷答案,并打印出来

实际上&#xff0c;针对试卷答案的问题&#xff0c;一个简单而高效的方法是使用图片编辑软件中的“消除笔”功能。只需将试卷拍摄成照片&#xff0c;然后通过这一功能&#xff0c;就可以轻松擦除答案。虽然这种方法可能需要一些时间和耐心&#xff0c;但它确实为我们提供了一个…

增程SUV价格即将崩盘?买车一定要再等等!

文 | AUTO芯球 作者 | 雷歌​ 真是“离谱”啊&#xff0c;车圈真是逗比欢乐多&#xff0c; 我这两天看一个博主连续40多小时开车直播&#xff0c;充电口、油箱盖全部封死&#xff0c;全程视频直播没断过&#xff0c; 就为了测试这两天刚上市的星际元ET续航有多远。 另一个…

深入解析RedisJSON:在Redis中直接处理JSON数据

码到三十五 &#xff1a; 个人主页 JSON已经成为现代应用程序之间数据传输的通用格式。然而&#xff0c;传统的关系型数据库在处理JSON数据时可能会遇到性能瓶颈。为了解决这一问题&#xff0c;Redis推出了RedisJSON模块&#xff0c;它允许开发者在Redis数据库中直接存储、查询…

Flink最全文档

Flink架构&#xff1a; 分布式系统Flink&#xff0c;需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器&#xff0c;例如Hadoop Yarn&#xff0c;Apache Mesos&#xff0c;Kubernetes&#xff0c;但是也可以设置作为独立集群甚至库来运行。 分…

3ds Max与Maya不同之处?两者哪个更适合云渲染?

3ds Max 和 Maya 都是知名的3D软件&#xff0c;各有其特色。3ds Max 以直观的建模和丰富的插件生态闻名&#xff1b;Maya 则在动画和角色创作方面更为出色。两者都支持云渲染技术&#xff0c;能帮助用户在云端高效完成项目。 一、3ds Max和Maya之间的主要区别&#xff1a; 3ds…

如何在控制台应用程序里面托管ASP.NET Core WebApi + swashbuckle生成接口文档

目录 介绍项目结构运行效果新增引用新增文件介绍 本文讲解如何在控制台应用程序里面托管ASP.NET Core WebApi + swashbuckle生成接口文档 本文是上一篇文章的延续,如果你对这部分内容还不了解,建议先读上一篇文章:如何在控制台应用程序里面托管ASP.NET Core网站 项目结构 …

原子学习笔记3——点亮 LED

一、应用层操控设备的两种方式 应用层如何操控底层硬件&#xff0c;同样也是通过文件 I/O 的方式来实现&#xff0c;设备文件便是各种硬件设备向应用层提供的一个接口&#xff0c;应用层通过对设备文件的 I/O 操作来操控硬件设备&#xff0c;譬如 LCD 显示屏、串口、按键、摄像…

MVC 过滤器

MVC 过滤器常用有4种 Action过滤器&#xff08;IActionFilter&#xff09; 》 行为过滤器Result过滤器 &#xff08;IResultFilter&#xff09;》 视图过滤器 或 结果过滤器Exception过滤器&#xff08;IExceptionFilter&#xff09;》 异常过滤器Authorization过滤器&#xf…

OpenAI 发布了免费的 GPT-4o,国内大模型还有哪些机会?

大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 这是今天在某乎看到一个问题&#xff1a;OpenAI 发完 GPT-4o&…

涨点神器:即插即用特征融合模块!超低参数,性能依旧SOTA

在写论文时&#xff0c;一些通用性模块可以在不同的网络结构中重复使用&#xff0c;这简化了模型设计的过程&#xff0c;帮助我们加快了实验的迭代速度。 比如在视觉任务中&#xff0c;即插即用的特征融合模块可以无缝集成到现有网络中&#xff0c;以灵活、简单的方式提升神经…

AIGC数字人视频创作平台,赋能企业常态化制作数字内容营销

随着数字人技术不断发展&#xff0c;AIGC、元宇宙等相关产业迅速发展&#xff0c;企业通过3D虚拟数字人定制&#xff0c;打造出专属的数字人作为企业与用户沟通的新桥梁。 作为3D、AI数字人技术服务商及方案提供商&#xff0c;广州虚拟动力一直致力于为各领域企业通过3D虚拟数字…

OpenAI春季更新:GPT-4o模型来了!!

昨晚OpenAI直播发布了春季更新&#xff0c;推出了GPT-4o模型。这个模型是继gpt-4-turbo之后官方定义的新旗舰模型&#xff0c;可以实时对音频、视觉和文本进行推理。 它真的让人觉得&#xff0c;AGI又更近一步了&#xff01;&#xff01; GPT-4o介绍 GPT-4o&#xff08;“o”…

前端工程化 - 快速通关 - ES6

目录 ES6 1.1 let 1.2 const 1.3解构 1.4链判断 1.5参数默认值 1.6箭头函数 1.7模板字符串 1.8Promise 1.9Async 函数 1.10模块化 ES6 ●ECMAScript&#xff08;ES&#xff09; 是规范、 JavaScript 是 ES 的实现 ●ES6 的第一个版本 在 2015 年 6 月发布&#xff0c…

相机模型,坐标变换,畸变

小孔成像模型 墨子就记录了小孔成像是倒立的。这从几何光学的角度是很好理解的&#xff1a;光沿直线传播&#xff0c;上方和下方的光线交叉&#xff0c;导致在成像平面位置互换。 小孔的大小有什么影响&#xff1f; 小孔越大&#xff0c;进光量变大了&#xff0c;但是成像平…

微信加粉计数器

1.采用非注入式开发&#xff0c;支持无限多开 2.每个账号都有独立的分组&#xff0c;实时远程网页数据分享 3.后台功能强大&#xff0c;操作简单&#xff0c;自动去重复&#xff0c;准确计数分秒不差