这篇page是针对leetcode上的494.目标和所写的。小尼先简单的说明一下这道题的意思,就是给出一个整数数组nums和一个整数target,需要向数组中的每个整数前添加'+'或者'-',然后串联起所有整数,可以构造一个表达式,返回可以通过上述方法构造的、运算结果等于target的不同表达式的数目。

首先呢小尼先简单的说明一下这道题的解题思路,我们不要把这道题想的过于复杂,也不要将这道题想的过于简单,其实这里可以写+也可以写-,其实无非就是构造成正数或者是负数,其实就是我们构造两个数组进行对应的赋值即可,一个数组里面全部都是赋值正数,另一个里面全部都是赋值负数。我们如果将所有的正数数组都定义为left,所有的负数数组都定义为right,那么我们定义一个sum=left+right,left-(sum-left)=target,那么我们通过上述三个式子我们可以推出一个结论就是,left=(target+sum)/2,然后我们需要的是满足为target的组合,其实就直接转换成了0-1背包问题,装满容器为x背包,有几种方法。

小尼接下来继续说明一下动态规划五部曲:

1、确定dp数组以及下标的含义:dp[j]表示:填满j(包括j)这么大容积的包,有dp[j]种方法

2、确定递推公式:当我们考虑到nums[i]的话,凑成dp[j]就有dp[j]-nums[i]种方法,这里其实就是类似于一个累加起来的方法

dp[j] += dp[j - nums[i]]

3、dp数组如何进行初始化:从递归公式我们可以看出,在初始化的时候dp[0]一定要初始化为1,因为dp[0]是在公式种一切递推结果的起源,所以dp[0]一定只能是1,如果为0,那么之后的所有的结果都将是0

4、确定遍历顺序:跟我们之前说过的0-1背包问题一样,nums放在外循环,target在内循环,且内循环倒序

5、最后就是导出dp数组

小尼接下来拉一下解题代码:

class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;for(int i = 0; i < nums.length; i++) sum += nums[i];if((target + sum) % 2 != 0) return 0;int size = (target + sum) / 2;if(size < 0) size = - size;int[] dp = new int[size + 1];dp[0] = 1;for(int i = 0; i < nums.length; i++){for(int j = size; j >= nums[i]; j--){dp[j] += dp[j - nums[i]];}}return dp[size];}
}

小尼简单的即使一下上述的代码,其中有一个可以很直接判断的条件,就是如果(target+sum)%2如果不为0,那么我们直接return false,其实这里如果不为0就是我们题目的条件给不出返回结果是算出的数的背包,其实就是我们不能组成的,然后接下来我们直接就是进行对应对遍历,我们需要返回可以达到的方法数,最后我们直接返回dp[size]。我们在这道题中先遍历的是物品,然后再遍历的是背包的容量,其实就是我们一个个记录的操作,我们先放入第一个物品,然后我们记录好dp数组,接下来我们继续放入之后的物品,然后我们的dp数组根据之前已经叠加了的数据进行对应的继续增加,最后再返回我们的dp[size]的值

希望上述代码可以帮助到小伙伴们~~~

My Seventy-first Page - 目标和 - By Nicolas相关推荐

  1. My Seventh Page - 设计链表 - By Nicolas

    这一篇page对应的是leetcode上面707.设计链表这个题目,首先这个题目的描述还是比较简单的,就是我们可以选择使用单链表或者双链表实现链表对应的增删改查的许多功能.小尼这个题目大部分都是看的题 ...

  2. linux内存源码分析 - 内存压缩(同步关系)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 最近在看内存回收,内存回收在进行同步的一些情况非常复杂,然后就想,不会内存压缩的页面迁移过程中的同步关系也 ...

  3. JSP快速入门教程——全十讲

    第一讲(参考<Java Web程序设计基础教程>第1章) 1 JSP 和 Java的关系 一般Java指的标注版 Java SE    另外两个版本:Java EE 和 Java ME J ...

  4. jsp中forward与sendRedirect的区别

    https://blog.csdn.net/cation/article/details/4278687 http://www.cnblogs.com/davidwang456/p/3998013.h ...

  5. 下列哪个适合做链栈_外贸企业如何做Google推广?自然排名和付费广告哪个更适合你?...

    外贸企业借助Google做海外推广,已经成为行业共识,即使像阿里巴巴这样的B2B平台每年也要砸大钱从Google引流.但是很多外贸企业一直纠结于是该做自然排名推广还是付费广告推广,两者的区别可不是免费 ...

  6. oracle sql core目录,oracle11g数据库常见故障处理.ppt

    * * * * * * Page * 目标 通过本章节的学习,您将了解以下内容: ORACLE工具(OEM等)的各种常见问题或故障; 这些问题或故障的诊断分析和解决方法; Page * Oracle ...

  7. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(8)之文章管理

    到这一步,我们整个项目的核心搭建已经算是完成了,接下来就是我们业务功能的实际应用,也就是表现层的设计和实现,如果你是一个项目负责人,到这一步,接下来的工作就可以交给下面的兄弟去完成了,在这里我们用文章 ...

  8. JSP基本语法、3个编译指令、7个动作指令、9个内置对象

    一.jsp概述 JSP是java server page的缩写,其本质是一个简化的servlet,是一种动态网页技术标准.jsp页面是在HTML页面中嵌入java程序段,使用jsp开发的应用程序可以跨 ...

  9. java_JSP_1

    1.JSP是什么? 例如: <%@page import="java.util.Date"%> <%@page import="java.text.Si ...

  10. 爬虫(二):新浪财经爬虫(获取文本信息)

    新浪财经爬虫(获取文本信息) BiuBiu,接上一篇文章,这一次,我并没有用东方财富网站,而是新浪财经网,当然,也是因为个人需要啦.但是我看了一下,大差不差,只要看懂那些div,就能够爬取. 首先给大 ...

最新文章

  1. 条件随机场(CRF) - 2 - 定义和形式
  2. Linux(CentOS)安装分区方案
  3. php开发如何测试,用thinkphp开发微信,如何测试?
  4. linux下定时器实现
  5. Jquery赋值和取值input,combobox,numberbox........
  6. Robot Cleaner I
  7. 克隆需要验证_[实验技巧]CRISPR实验中如何验证编辑?
  8. android 复用标题栏,Android基础---使用ToolBar教你打造一个通用的标题栏
  9. HttpClientHelper的封装
  10. 一文详解python的类方法,普通方法和静态方法
  11. redis依赖包_解决痛点:二方包稳定性测试实践
  12. Eclipse配置Hadoop开发环境
  13. BP神经网络算法基本原理,BP神经网络算法流程图
  14. spring boot中小学餐饮配送系统 毕业设计源码645661
  15. GPA计算 UESTC - 152
  16. 2021年上半年系统集成项目管理工程师上午试题参考解析(二)
  17. 系统集成项目管理工程师英语题翻译
  18. 前后端分离研究,以及接口规范
  19. 尚硅谷-谷粒商城-电商项目-秒杀系统-笔记
  20. 网络安全能不能自学?自学能不能学会?

热门文章

  1. 高通 thermal子系统
  2. jsPlumb 学习笔记(1)(api部分翻译)
  3. 教育企业该如何搭建私域流量池
  4. Image data of dtype object cannot be converted to float 问题解决
  5. 分散式云存储,元宇宙数据存储基建
  6. java中的undefined_undefined是什么意思啊?
  7. 抢票助手-for 12306买火车票.订票助手.高铁.动车.春运.车票管家.自动刷票.列车时刻表
  8. idm由于法律原因无法下载怎么办?
  9. 机器人学(二):动力学参数辨识
  10. 泛微工作流程管理解决方案(转载)