Leetcode--Java--377. 组合总和 Ⅳ

2023-11-10

题目描述

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。

样例描述

示例 1:

输入:nums = [1,2,3], target = 4
输出:7
解释:
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。
示例 2:

输入:nums = [9], target = 3
输出:0

思路

动态规划
状态表示和状态计算如下: 时间复杂度为0(target n),target为状态数量,每个状态要划分为n个子集。
在这里插入图片描述

  1. 考虑最后一个数aj(图中以一段坐标表示一个数)的不同的取法,对应不同的划分方案。每个划分方案都是以aj数作为结尾,因此aj左边的划分方案数累加起来就是整个的划分方案。这里枚举不断最后一个数,直到target即可
  2. 转移的条件要注意状态值i一定要大于划分出的数num[j]。
  3. 初始如果0的话只有一种拆分方案,就是空集。
  4. **进阶:**如果包含负数的话,状态之间转移会存在环,就不能用dp,因为状态之间会有依赖关系,方案数可能有无穷多种,如下1和-1凑2的话,可能为1 - 1, 1 - 1 + 1 - 1… (没法做了
    在这里插入图片描述
  5. 不要直接思维定势用背包问题,这个不等同于背包问题

代码

class Solution {
    public int combinationSum4(int[] nums, int target) {
         int f[] = new int[target + 1];
         f[0] = 1;
         for (int i = 0; i <= target; i ++ ) {
             for (int j = 0; j < nums.length; j ++ ) {
                 if (i >= nums[j]) {
                     f[i] = f[i] + f[i - nums[j]];
                 }
             }
         }
         return f[target];
    } 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode--Java--377. 组合总和 Ⅳ 的相关文章

随机推荐

  • LeetCode 344 反转字符串 --s[:]=s[::-1]和s[:]=s[::-1]的不同

    编写一个函数 其作用是将输入的字符串反转过来 输入字符串以字符数组 char 的形式给出 不要给另外的数组分配额外的空间 你必须原地修改输入数组 使用 O 1 的额外空间解决这一问题 你可以假设数组中的所有字符都是 ASCII 码表中的可打
  • 滤波方法总结

    经典滤波方法主要有低通 高通 带通 带阻滤波 相关滤波 限幅滤波 中值滤波 基于拉依达准则的奇异数据滤波 基于中值数绝对偏差的决策滤波 算术平均滤波 滑动平均滤波 加权滑动平均滤波 一价滞后滤波 加权递推平均滤波 消抖滤波 限幅消抖滤波 维
  • soamanager 弹不出浏览器

    https www cnblogs com WACBZWY p 11970420 html 输入SOAMANGER左下角提示正在启动 一闪而过 并没有弹出浏览器 se24 将 CL GUI HTML VIEWER类中 方法 DETACH U
  • 00 SD卡知识简介

    具体可见如下文章 源地址 SD卡介绍
  • ZooKeeper之(六)应用实例

    6 1 Java API 客户端要连接 Zookeeper服务器可以通过创建 org apache zookeeper ZooKeeper 的一个实例对象 然后调用这个类提供的接口来和服务器交互 ZooKeeper 主要是用来维护和监控一个
  • pybind11传输文件

    python open之后的bytes 加长度 c 接收string 需要时pBuffer c str 和长度就ok了 c 别用char 在linux下有时会报错 代码 c using namespace std int add perso
  • 毕业设计(基于TensorFlow的深度学习与研究)之总结概述篇

    阅读本文大概需要 10 分钟 前言 今天是2020 07 30 距离我答辩已经过去1个月时间 距离我完成论文初稿并在paperpass上查重已经过去4个月时间 经过这么长时间的思考 沉淀 我将在本文中主要涉及3个方面的内容 希望能够给即将进
  • Pandas数据的导入与导出

    Excel格式数据导入 文件格式 读取方法 Excel文件 read excel CSV文件 read csv txt文件 read table Json文件 read json MySQL文件 read sql table 对于上述这些方
  • 圆形电子围栏检测嵌入式C实现

    js代码 fileoverview GeoUtils类提供若干几何算法 用来帮助用户判断点与矩形 圆形 多边形线 多边形面的关系 并提供计算折线长度和多边形的面积的公式 主入口类是 a href symbols BMapLib GeoUti
  • linux修改时区 修正时间

    1 tzselect 2 选择Asia 3 选择china 4 选择beijing 5 最后执行TZ Asia Shanghai export TZ 6 重启
  • html弹窗口并获取返回值,Js 弹出框口并返回值的两种常用方法

    1 window showModalDialog url args dialogattrs 参数说明 url 弹出页面地址 agrs 主窗口传给对话框的参数 可以是任意类型 数组也可以 dialogattrs 弹出窗口的样式参数 模式对话框
  • 【面试精讲】Java:Exception 和 Error 有什么区别?

    前言 众所周知 没有 BUG 的程序只会出现在程序员的梦里 异常情况如影随形地纠缠着我们 只有正确处理好意外情况 才能保证程序的可靠性 Java 语言在设计之初就提供了相对完善的异常处理机制 这也是 Java 得以大行其道的原因之一 因为这
  • NVIDIA GPU 算力表

    来自nvidia官方 https developer nvidia com cuda gpus
  • 线程同步

    线程同步 作者 buaawhl 我们可以在计算机上运行各种计算机软件程序 每一个运行的程序可能包括多个独立运行的线程 Thread 线程 Thread 是一份独立运行的程序 有自己专用的运行栈 线程有可能和其他线程共享一些资源 比如 内存
  • Selenium系列教程 - 文件上传

    主要内容 一 通过send keys方法 该方法只适用于input标签 二 通过AutoIt来处理上传文件 适用所有 三 其他方法 四 多文件上传 在Web UI自动化测试中可能会遇到文件上传的场景 针对该场景我们要区分上传按钮的种类 大体
  • 第四周作业

    实验作业 1 完成课本每一个编程题 要求先画出流程算法图或N S图 然后编程实现 有可能的话使用两种以上方法 2 编程求 百钱百鸡 问题 鸡翁一值钱五 鸡母 一值钱三 鸡雏三值钱一 百钱买百鸡 问鸡翁 鸡母 鸡雏各几何 3 编程输入一个整数
  • centos7下boot空间不足解决办法

    root localhost admin rpm qa grep kernel 看下有哪些 然后用yum remove kernel devel 3 10 0 327 el7 x86 64 删除
  • 创建Numpy数组(zeros()、ones()、empty()、arange())

    创建Numpy数组 zeros 创建出来的数组里边的元素都是0 例如 data01 np zeros 3 4 print data01 ones 创建出来的数组里边的元素都是1 例如 data02 np ones 3 4 print dat
  • 前端通过spark-md5.js计算本地文件md5

    背景 说到本人第一次使用spark md5 js还是差不多一年以前的时候了 当时后台老大说要搞一个文件分片上传的功能 我当时就心想 what 啥是文件分片上传 完全没听过好吗 至于我当时内心那个慌就不多描述了 总之文件分片上传需要一个识别文
  • Leetcode--Java--377. 组合总和 Ⅳ

    题目描述 给你一个由 不同 整数组成的数组 nums 和一个目标整数 target 请你从 nums 中找出并返回总和为 target 的元素组合的个数 题目数据保证答案符合 32 位整数范围 样例描述 示例 1 输入 nums 1 2 3