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

[LeetCode] 494. 目标和

题目描述:

给你一个非负整数数组 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

题目链接:

给你一个非负整数数组 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

题目链接:. - 力扣(LeetCode)

解题主要思路:

其实这题跟 “子集” 那道题有点像,把nums内的元素看成一棵树,父节点的两个子节点可以分别表示为+下一个元素或者-下一个元素。当pos == nums.size()时,则代表遍历完成,此时只需要判断sum是否==target即可。

子集链接:[LeetCode] 78. 子集-CSDN博客

解题代码:

class Solution {
public:
    int ret = 0;
    int aim = 0;
    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.kler.cn/a/374054.html

相关文章:

  • SWAT-MODFLOW地表水与地下水耦合实践技术
  • 多线程和线程同步基础篇学习笔记(Linux)
  • EDA --软件开发之路
  • 第二届新生程序设计竞赛热身赛(C语言)
  • Flutter鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
  • python画图|坐标轴比例设置方法
  • ffmpeg 提取mp4文件中的音频文件并保存
  • 重塑社区治理:王鹏谈Vitalik Buterin的去中心化理念
  • 前端如何解决浏览器input输入框密码自动填充的问题
  • 配置DDNS结合光猫路由器实现外网映射
  • Docker 60个常用命令汇总
  • springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38819)
  • 丢失有一段时间时的数据可以找回吗?可以!
  • Rust 知识的 20 道练习题和详细解答
  • 【JVM】——GC垃圾回收机制(图解通俗易懂)
  • nginx 路径匹配,关于“/“对规则的影响
  • 多厂商的实现不同vlan间通信
  • LLM速览篇【241-270】
  • 高效网络自动化:Python在网络基础中的应用
  • [论文精读]LoRA: Low-Rank Adaptation of Large Language Models
  • 【初阶数据结构与算法】新的旅程之时间复杂度和空间复杂度
  • 学Linux的第五天
  • 如何在被 DDoS 攻击时更换 IP 地址
  • Vue项目中动态路由与权限控制:router.beforeEach的使用及无token重定向登录页
  • Linux上python离线安装教程
  • 常见问题 | 数字签名如何保障电子商务交易安全?