布尔运算00

题目链接

布尔运算

题目描述

注意点

  • 运算符的数量不超过 19 个
  • 布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成
  • 算出有几种可使该表达式得出 result 值的括号方法

解答思路

  • 可以使用动态规划根据左右两侧区间不同结果相应组合数量计算得出当前区间不同结果相应组合数量,dp[i][j][k]表示第i个到第j个数字组合结果为k的组合数量
  • 初始先将dp[i][i][s.charAt(i) - ‘0’]设置为1
  • 三重循环计算dp[0][s.length() - 1][result]的值:第一重循环枚举区间长度为len时不同结果相应的组合数量;第二重枚举所有区间长度为len的不同区间中不同结果相应的组合数量;第三重循环枚举[i, j]的区间内所有的组合并计算组合相应结果的数量

代码

class Solution {public int countEval(String s, int result) {int n = s.length();// dp[i][j][k]表示第i个到第j个数字组合结果为k的组合数量int[][][] dp = new int[n][n][2];// 初始将每个位置的数字写到dp中for (int i = 0; i < n; i += 2) {dp[i][i][s.charAt(i) - '0'] = 1;}// 第一重循环枚举区间长度为len时不同结果相应的组合数量,每次跳两格方便找到下一个数字for (int len = 2; len < n; len += 2) {// 第二重枚举所有区间长度为len的不同区间中不同结果相应的组合数量for (int i = 0; i < n - len; i += 2) {int j = i + len;// 第三重循环枚举[i, j]的区间内所有的组合,组合数量可根据符号左右两侧的数字组合数量推出for (int k = i; k < j; k += 2) {char operate = s.charAt(k + 1);if (operate == '&') {// 结果为0左右有一侧为0即可dp[i][j][0] += dp[i][k][0] * dp[k + 2][j][0] + dp[i][k][0] * dp[k + 2][j][1] + dp[i][k][1] * dp[k + 2][j][0];// 结果为1必须左右两侧都为1dp[i][j][1] += dp[i][k][1] * dp[k + 2][j][1];}if (operate == '|') {// 结果为0必须左右两侧都为0dp[i][j][0] += dp[i][k][0] * dp[k + 2][j][0];// 结果为1左右有一侧为1即可dp[i][j][1] += dp[i][k][1] * dp[k + 2][j][1] + dp[i][k][0] * dp[k + 2][j][1] + dp[i][k][1] * dp[k + 2][j][0];}if (operate == '^') {// 结果为0左右侧都为0或者左右侧都为1dp[i][j][0] += dp[i][k][0] * dp[k + 2][j][0] + dp[i][k][1] * dp[k + 2][j][1];// 结果为1左右侧有一侧为0,另一侧为1dp[i][j][1] += dp[i][k][1] * dp[k + 2][j][0] + dp[i][k][0] * dp[k + 2][j][1];}}}}return dp[0][n - 1][result];}
}

关键点

  • 动态规划的思想:怎么根据更小的区间组合推出更大的区间组合,怎么根据左右区间组合推出当前区间组合
  • 不同符号,左右两侧数字为0或1时分情况讨论

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宠物空气净化器真的有必要买吗?养宠家庭建议看完这篇再考虑入手

可爱的猫咪是爱猫人士的心头好&#xff0c;但猫咪们的掉毛问题却一直困扰着不少人&#xff0c;猫浮毛在空气中乱飘&#xff0c;不但污染环境&#xff0c;还可能引发过敏和哮喘等呼吸道疾病。 作为一个家电推荐官&#xff0c;我有对付猫咪浮毛、异味的神器———宠物空气净化器…

将CSV、Excel、XML文件转换为MySQL数据库

在平时的工作中&#xff0c;经常会遇到需要将文件数据导入到数据库中的情况。有些客户之前可能只使用Excel表格作为记录工具&#xff0c;但当数据量达到一定程度或者需要将数据导入到其他系统中时&#xff0c;就会很emo,因为Excel表格虽然方便&#xff0c;但在数据处理和管理方…

在 UBUNTU 22.04 上逐步构建 Postal SMTP 服务器

构建 Postal SMTP 服务器来发送批量电子邮件是电子邮件营销人员的不错选择。Postal 功能非常强大&#xff0c;并拥有大量开发人员的支持。它是一个用 JavaScript 和 Ruby 编写的开源邮件服务器脚本。它可用于构建内部 SMTP 服务器&#xff0c;就像 Mailgun、Sendgrid、Mailchim…

慢动作视频怎么制作?5种方法,轻松制作慢动作视频

在短视频风靡的当下&#xff0c;慢动作视频凭借其独特的视觉效果和引人入胜的节奏感&#xff0c;成为了吸引观众眼球的利器。你是否也想知道如何制作这种令人心动的慢动作视频呢&#xff1f;下面教大家5种能够制作出慢动作视频的方法&#xff0c;一起来学习下吧。 方法一&#…

openEuler 22.03 (LTS-SP1)服务器用ntpd同步GPS时间服务器的案例

本文记录了openEuler 22.03 (LTS-SP1)的二级时间服务器用chronyd不能自动同步GPS时间服务器&#xff0c;改用ntpd同步GPS时间服务器成功的案例 一、环境简述 1、本环境中有两台GPS一级时间服务器&#xff0c;IP如下&#xff1a; 192.168.188.66 192.168.188.74 2、有一台o…

分布式kettle调度管理平台简介

介绍 Kettle&#xff08;也称为Pentaho Data Integration&#xff09;是一款开源的ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff0c;由Pentaho&#xff08;现为Hitachi Vantara&#xff09;开发和维护。它提供了一套强大的数据集成和转换功能&#xff0c…

51循迹小车(蓝牙+循迹+超声波+舵机+避障L298N)

基本驱动 L298N电机驱动模块负责供电和控制电机驱动 将电池12V供电接到12V供电上&#xff0c;作为输入。单片机及其他器件供电可以使用5V供电&#xff0c;这里的GND都接到一起。 输出A和输出B接到电机上&#xff0c;负责给电机供电和控制电机。 通道A使能和通道B使能以及逻…

【Confluence】markdown格式转换为Confluence

简单的文本可以使用网站来快速转换&#xff0c;但是发现很多格式不能正确转换&#xff0c;所以研究了一个Py的方法来实现&#xff0c;如下&#xff1a; 安装Py插件 本方法主要借用markdown2 来实现&#xff0c;开始之前需要先安装一些库。 pip install markdown2 beautiful…

TCP 和 UDP 可以同时绑定相同的端口吗?

在网络编程中&#xff0c;TCP和UDP都可以绑定到同一个端口上进行通信。TCP和UDP是OSI模型中的传输层协议&#xff0c;它们分别使用不同的端口号来区分不同的应用程序或服务。 TCP&#xff08;Transmission Control Protocol&#xff09;提供了面向连接的、可靠的传输服务&…

python办公自动化之excel

用到的库&#xff1a;openpyxl 实现效果&#xff1a;读取单元格的值&#xff0c;写入单元格 代码&#xff1a; import openpyxl # 打开现有工作簿 workbookopenpyxl.load_workbook(现有工作簿.xlsx) # 选择一个工作表 sheetworkbook[交易表] # 读取单元格的值 cell_valueshe…

webpack【实用教程】

基础配置 配置的拆分和合并 通常 webpack 的配置文件会有3个 webpack.common.js 公共配置&#xff08;会被另外两个配置文件导入并合并&#xff09;webpack.dev.js 开发环境的配置webpack.prod.js 生产环境的配置 开发环境的本地服务 在 webpack.dev.js 中配置 devServer:…

钡铼BL104智慧环保多个485采集转MQTT无线传输

PLC物联网关BL104是一款专为工业环境设计的先进协议转换网关&#xff0c;其集成了钡铼智能技术和环保多个485采集转MQTT无线传输功能&#xff0c;为工业控制系统提供了高效的数据采集、传输和管理解决方案。 技术规格与功能特点 PLC物联网关BL104采用钡铼智能技术&#xff0c…

PPT怎么录制视频?这里有你想要的答案!

“有人知道ppt怎么录制视频吗&#xff1f;我正在准备一个关于新产品功能介绍的演示文稿&#xff0c;希望能将我的ppt转化为一个专业且生动的视频讲解。我尝试了一些方法&#xff0c;但不知道从哪里开始。有没有哪位朋友能分享一下自己录制ppt视频的经验吗&#xff1f;” 在数字…

前端打包配置+nginx配置实现部署及部署地址带特定前缀的几种方式

前端打包后要部署到服务器&#xff0c;在浏览器中可以通过url访问到我们开发的系统&#xff0c;通过nginx代理在工作中是一种很常用的方式。 这里以本地为例&#xff0c;把本地电脑当作一个服务器&#xff0c;实现普通部署、带特定前缀等 前端使用vue-clivue作为例子 以下内容…

Oracle中常用内置函数

一、字符串函数 CONCAT(s1, s2)&#xff1a;连接两个字符串s1和s2。 SELECT CONCAT(Hello, World) FROM DUAL-- 结果&#xff1a;Hello World --或者使用 || 操作符 SELECT Hello || World FROM DUAL -- 结果&#xff1a;Hello World INITCAP(s)&#xff1a;将字符串s…

OpenHarmony 5.0 纯血鸿蒙系统

OpenHarmony-v5.0-Beta1 版本已于 2024-06-20 发布。 OpenHarmony 5.0 Beta1 版本标准系统能力持续完善&#xff0c;ArkUI 完善了组件通过 C API 调用的能力&#xff1b;应用框架细化了生命周期管理能力&#xff0c;完善了应用拉起、跳转的能力&#xff1b;分布式软总线连接能力…

如何找合适的C++项目给自己的简历加分?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; C的工作多种多样&#x…

Str.format()方法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 在Python2.6之后&#xff0c;提供了字符串的format()方法对字符串进行格式化操作。format()功能非常强大&#xff0c;格式也比较复杂&…

MobPush iOS端海外推送最佳实现

推送注册 在AppDelegate里进行SDK初始化&#xff08;也可以在Info.plist文件中进行AppKey&#xff0c;AppSecret的配置&#xff09;并对通知功能进行注册以及设置推送的环境和切换海外服务器等&#xff0c;参考如下步骤代码&#xff1a; <span style"background-colo…

文心一言 VS 讯飞星火 VS chatgpt (291)-- 算法导论21.3 4题

四、假设想要增加一个 PRINT-SET(x) 操作&#xff0c;它是对于给定的结点 x 打印出 x 所在集合的所有成员&#xff0c;顺序可以任意。如何对一棵不相交集合森林的每个结点仅增加一个属性&#xff0c;使得 PRINT-SET(x) 所花费的时间同 x 所在集合元素的个数呈线性关系&#xff…