当前位置: 首页 > news >正文

Leetcode刷题详解—— 目标和

1. 题目链接:494. 目标和

2. 题目描述:

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

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

  • 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1"

返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

示例 1:

输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3

示例 2:

输入:nums = [1], target = 1
输出:1

提示:

  • 1 <= nums.length <= 20
  • 0 <= nums[i] <= 1000
  • 0 <= sum(nums[i]) <= 1000
  • -1000 <= target <= 1000

3. 解法(回溯):

3.1 算法思路:

对于每个数,可以选择加上或减去它,依次枚举每一个数字,在每个数都被选择时检查得到的和是否等于目标值。如果等于,则记录结果。

需要注意的是,为了优化时间复杂度,可以提前计算出数组中所有数字的和,以及数组的长度。这样可以快速判断当前的和减去剩余的数是否已经超过了目标值target,或者当前的和加上剩下的数的和是否小于目标值target,如果满足条件,则可以直接回溯

3.2 递归流程:

  1. 递归结束条件:pos与数组长度相等,判断当前状态的path是否与目标值相等,若是计数加一

  2. 选择当前元素进行加操作,递归下一个位置,并更新参数path

  3. 选择当前元素进行减操作,递归下一个位置,并更新参数path

请添加图片描述

3.3 C++算法代码:

class Solution {int ret, aim; // ret用于记录满足条件的路径数量,aim用于存储目标和
public:int findTargetSumWays(vector<int>& nums, int target) {aim = target; // 初始化目标和dfs(nums, 0, 0); // 从数组的第一个元素开始搜索return ret; // 返回满足条件的路径数量}void dfs(vector<int>& nums, int pos, int path) {if (pos == nums.size()) { // 如果已经遍历完数组if (path == aim) ret++; // 如果当前路径的和等于目标和,则增加满足条件的路径数量return; // 结束当前递归}dfs(nums, pos + 1, path + nums[pos]); // 选择当前元素,将其加入路径中,继续搜索下一个元素dfs(nums, pos + 1, path - nums[pos]); // 不选择当前元素,将当前元素从路径中移除,继续搜索下一个元素}
};
http://www.lryc.cn/news/226674.html

相关文章:

  • 学习c#的第六天
  • 第七章 :Spring Boot web开发常用注解(二)
  • IOC - Google Guice
  • 国际阿里云:Linux实例负载高问题排查和异常处理!!!
  • 【数据结构】二叉树的遍历递归算法详解
  • 百度王颖:百度文库以AI创作能力突破语言边界,促进思想碰撞和文化融通
  • 人工智能基础_机器学习023_理解套索回归_认识L1正则---人工智能工作笔记0063
  • Learning an Animatable Detailed 3D Face Model from In-The-Wild Images论文笔记
  • Lenovo联想小新Air-14笔记本2021款AMD锐龙ALC版(82LM)原装出厂Win10镜像和Windows11预装OEM系统
  • 在程序中链接静态库
  • TortoiseSVN 状态图标不显示的两种解决办法
  • NSSCTF-Crypto入门题 练习记录贴 ‘‘一‘‘
  • Day03:注意事项、this关键字、构造器、JavaBean、String、ArrayList
  • 【从0到1设计一个网关】性能优化---缓存
  • Typescript -尚硅谷
  • 以 Kubernetes 原生方式实现多集群告警
  • 2023年A股借壳上市研究报告
  • 【TiDB】TiDB CLuster部署
  • odoo16 库存初始化 excel导入问题
  • 2023.11.11 关于 Spring 中 Bean 的作用域
  • 5 Paimon数据湖之表数据查询详解
  • 时间序列预测实战(十二)DLinear模型实现滚动长期预测并可视化预测结果
  • 封神教程:腾讯云3年轻量应用服务器老用户购买方法
  • Ubuntu(WSL2) 安装最新版的 cmake
  • Android---内存泄漏的优化
  • C/S架构学习之基于UDP的本地通信(客户机)
  • 【性能测试】服务端中间件docker常用命令解析整理(详细)
  • 【探索Linux】—— 强大的命令行工具 P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)
  • 图论12-无向带权图及实现
  • 每日一题(LeetCode)----数组--有序数组的平方