LeetCode494:目标和

题目描述

给你一个非负整数数组 nums 和一个整数 target 。

向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :

例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

在这里插入图片描述
代码
回溯

class Solution {
public:int count = 0;void backTracking(const vector<int>& nums, const int& target, int index, int sum) {if (index == nums.size()) {if(sum==target)count++;}else {backTracking(nums, target, index + 1, sum + nums[index]);backTracking(nums, target, index + 1, sum - nums[index]);}}int findTargetSumWays(vector<int>& nums, int target) {backTracking(nums, target, 0, 0);return count;}
};

动态规划

/*left是正数集合,right是负数集合left - right = targetleft + right = sumleft = (sum+target) / 2right = (sum-target) / 2如果不能整除 直接return 0;将left = (sum+target)/2 看做是背包的容量看有多少种方法能将背包装满dp[j]: 装满容量为j的背包,有dp[j]种方法递推公式:已有  可以凑成的数量(以5为例)1   dp[4]种 凑成dp[5]2   dp[3]种 凑成dp[5]3   dp[2]种 凑成dp[5]4   dp[1]种 凑成dp[5]5   dp[0]种 凑成dp[5]dp[j]+=dp[j-nums[i]]初始化:dp[0] = 1;遍历顺序:for(int i=0;i<nums.size();i++)for(int j = left;j>=nums[i];j--)dp[j]+= dp[j-nums[i]]
*/class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;for (int a : nums) sum += a;if (abs(target)>sum || (sum + target) % 2 != 0) return 0;int left = (sum + target) / 2;vector<int> dp(left + 1, 0);dp[0] = 1;for(int i=0;i<nums.size();i++)for (int j = left; j >= nums[i]; j--) {dp[j] += dp[j - nums[i]];}return dp[left];}
};

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

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

相关文章

JavaScript基础(七)

isNaN //用来判断一个变量是不是一个非数字 不是来判断是不是number类型&#xff0c;而是判断当前值能不能转为number类型&#xff0c;OK&#xff1f;懂了。 还有同学不明白&#xff0c;来看实例: <script> //isNaN(非数字)→true &#xff08;数字&#xff09;→fal…

动画:3dmax

动画制作流程&#xff1a;模型 -> 骨骼&#xff08;Bone/Biped&#xff09; -> 蒙皮&#xff08;Skin/Bone Pro&#xff09; -> 动画 1.基础 1.1创建bones骨骼 骨骼分为2种&#xff0c;一种是bones另一种是biped。它们的区别是用bones需要自己创建骨骼系统&#xff0…

UV:展uv

1.3dmax 选中物体 修改器列表选中“UV展开” 打开UV编辑器 断开圆圈 同理断开瓶底 展开侧面 剥离 拉直 排列 纹理盘格 用于查看排列位置 渲染UV模板 PS图片 将不要的部分填充为黑色 复制图片 删除多余 保存图片 添加材质球和位图 按M打开材质球编辑器 重置UV 将uv变为初始…

文献检索神器分享:一键筛选顶刊论文,还能免费下载全文!

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 信息爆炸的时代&#xff0c;文献是根本读不完。一个关键词能搜出来几万篇&#xff0c;而且有些结论还是完全相反的&#xff0c;到底该读哪些&#xff1f; 第一步的文献筛选很重…

基于多传感器的智能小区安防系统设计与实现-设计说明书

设计摘要&#xff1a; 本设计是基于多传感器的智能小区安防系统的设计与实现。系统主要包括烟雾和温度传感器、人体红外传感器、OLED显示屏、WiFi模块和按键控制等组件。通过这些组件的协作&#xff0c;实现了火灾检测、人员监测、数据显示和远程控制等功能。 首先&#xff0…

C#实现多线程的几种方式

前言 多线程是C#中一个重要的概念&#xff0c;多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提高系统并发性、吞吐量和响应速度的场景&#xff0c;可以充分利用多核处理器和系统资源&#xff0c;提高应用程序的性能和效率。 多线程常用场景 CPU 密集型任务…

MySQL数据库从入门到精通(下)

对表做了修改之后&#xff0c;记得点击对应图标按钮重新执行一下。 1.创建角色表 数据库一开始就要设计好&#xff0c;轻易不要改动。一个账号下可能有多个角色&#xff0c;所以我们单独再创建另一个表role用来存储所有的角色信息。其中idrole表示角色id&#xff0c;name表示名…

网络安全法中关于网络信息的保护和监管,有哪些规定?

网络安全法作为我们数字时代的重要法律保障&#xff0c;对于网络信息的保护和监管有着明确且详细的规定。这些规定不仅体现了国家对于网络安全的重视&#xff0c;也为我们每个人在数字世界中提供了坚实的法律屏障。 首先&#xff0c;我们来看一个关于网络运营者主体责任的案例。…

【翻译】Processing系列|(四)用 Android Studio 从 0 到 1 进行 Processing 安卓开发

原文链接&#xff1a;Processing for Android Developing with Android Studio 朋友跟我说官方教程里也写了该怎么用 Android Studio 开发&#xff0c;并且亲测可行。这种方式确实能开发出结构更加清晰、额外组件更加少的程序&#xff0c;比上一篇文章中直接克隆 Processing-An…

模电·复合管放大电路_040

复合管放大电路 一、复合管1.晶体管组成的复合管及其电流放大系数2.场效应管与晶体管组成的复合管及其跨导3.复合管的组成原则 二、复合管共射放大电路三、复合管共源放大电路四、复合管共集放大电路 一、复合管 1.晶体管组成的复合管及其电流放大系数 图1.( a )和( b )所示为…

YOLOV8从环境部署(GPU版本)

一、安装&#xff43;&#xff55;&#xff44;&#xff41;和&#xff43;&#xff55;&#xff44;&#xff4e;&#xff4e; 1、安装cuda之前先打开英伟达控制面板查看自己的显卡信息 2、“帮助”—>“系统信息”—>“组件”&#xff0c;然后看第三行的信息“Nvidia …

javaSE:类和对象

面向对象 java是一种面向对象的编程语言&#xff0c;面向对象就是把能为我们所用的东西直接拿来使用&#xff0c;省去中间过程&#xff0c;比如洗衣服&#xff0c;要完成这一个动作&#xff0c;我们本来需要一个盆&#xff0c;放水&#xff0c;放衣服&#xff0c;换水&#xf…