原题链接:https://leetcode-cn.com/problems/target-sum/

相关题目:预测赢家

1、递归

和预测赢家一样,都是有两种选择,并且最后是求和,很容易想到用递归解决

long findTargetSumWays(vector<int>& nums, int S) {int len=nums.size();return calculate(nums,len-1,S);
}long calculate(vector<int>& nums,int i,long S){if(i==-1){if(S==0) return 1;else return 0;}return calculate(nums,i-1,S-nums[i])+calculate(nums,i-1,S+nums[i]);
}

2、动态规划

这题的动态规划也不容易想到,需要些技巧

Q表示正和,P表示负和,S表示列表和,T表示目标
Q-P=T
Q+P=S
于是有
2Q=T+S

这样我们就计算和为(T+S)/2的数的组合个数就可以了。于是

dp[i]表示满足和为i的组合个数

状态转移

dp[0]=1;
dp[i]+=dp[i-num];

代码:

int findTargetSumWays(vector<int>& nums, int S) {long sum=0;for(int num:nums) sum+=num;if((S+sum)%2!=0||S>sum) return 0;int target=(S+sum)/2;vector<int> dp(target + 1, 0);dp[0]=1;for(auto num:nums){for(int i=target;i>=num;i--){dp[i]+=dp[i-num];}}return dp[target];
}

不过不能溢出,需要注意一些细节,代码写起来不如递归轻松。但是如果能用一些数学转换,确实能达到事半功倍的效果!

leetcode算法题--目标和相关推荐

  1. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  2. Leetcode算法题:两个有序数组求中位数

    Leetcode算法题:两个有序数组求中位数 要求时间复杂度为O(log(m+n)) 思路: 暴力解决:合并数组并排序,简单且一定能实现,时间复杂度O(m+n) 由于两个数组已经排好序,可一边排序一边 ...

  3. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

  4. LeetCode算法题-Reverse Linked List(Java实现)

    这是悦乐书的第192次更新,第195篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206).反转单链表.例如: 输入:1-> 2-> 3- ...

  5. LeetCode算法题-Convert a Number to Hexadecimal(Java实现)

    这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...

  6. leetcode算法题--零钱兑换

    原题链接:https://leetcode-cn.com/problems/coin-change/ 相关题目:leetcode算法题–完全平方数★ 动态规划 dp[i] i从0到amount,dp[ ...

  7. leetcode算法题-- 买卖股票的最佳时机

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 这类股票题目请见leetcode算法题–最佳买卖股票时机含 ...

  8. leetcode算法题--买卖股票的最佳时机 II

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 这类股票题目请见leetcode算法题–最佳买卖股票 ...

  9. leetcode算法题--买卖股票的最佳时机含手续费

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 这类股票题目请见 ...

最新文章

  1. linux杀死tomcat进程6,Linux下启动停止查看杀死Tomcat进程(示例代码)
  2. knockout 学习笔记
  3. 具有Tron效果的JavaFX 2 Form
  4. 【C++ Primer | 19】控制内存分配
  5. python打印字典树形_Python实现字典树
  6. SpringBoot:Unable to start LiveReload server(已解决)
  7. 使用Python搭建人脸识别考勤系统
  8. Arduino PS2摇杆
  9. bugkuCTF 乌云邀请码 write up【橘小白】
  10. AppStore审核
  11. 论企业上云的三大阻力!
  12. beeline连接hive的两种方式
  13. flash_back介绍
  14. android博客集合
  15. PHP数组到底占用多少内存空间
  16. uni-app小程序使用小程序码绑定用户信息合成海报
  17. Ubuntu搭建LDAP服务器
  18. 如何合理的设计系统容量?
  19. 键盘--(微机原理实验五)
  20. python处理文件的学习--实例:自动化的根据文本内容绘制图形

热门文章

  1. python编程课程价格-无锡Python程序开发课程
  2. python项目开发实战-给缺少Python项目实战经验的人
  3. python基础语法第10关作业-Python基础语法习题
  4. python爬虫实例-python3.7简单的爬虫实例详解
  5. 快速排序 python菜鸟教程-快速排序
  6. Mint系统使用介绍,Mint系统安装,在Mint系统上搭建GPU环境,在Mint系统上安装Pycharm、Anaconda等软件,在Mint系统上安装cuda和cudnn
  7. ForkJoinPool框架设计与实现
  8. JAVA .xml 配置和 .properties 配置
  9. C 语言Hello world
  10. python3学习笔记一(标识符、关键字)