两个数字m、n,输出[1,m]范围内所有和为n的组合

2023-11-11

题目

输入两个数 m、n,输出 [1, m] 范围内所有和为 n 的组合。

样例输入:5, 3

样例输出:[[1, 1, 1], [1, 2], [3]]

代码

说明:

如果要求组合内数字不重复,可以用 getResult(i+1, end, target-i, temp);

import java.util.ArrayList;

public class Solution{

    private static ArrayList<ArrayList<Integer>> result = new ArrayList<>();

    public static void main(String[] args) {
        int a = 5;
        int b = 6;
        ArrayList<Integer> temp = new ArrayList<>();
        new Solution().getResult(1, a, b, temp);
        System.out.println(result);
    }

    public void getResult(int start, int end, int target, ArrayList<Integer> temp) {
        if (target == 0) {
            ArrayList<Integer> tmp = new ArrayList<>(temp);
            result.add(tmp);
            return;
        } else {
            for (int i=start; i<=end; i++) {
                if (i <= target) {
                    temp.add(i);
                    getResult(i, end, target-i, temp); // 数字有重复
                    //getResult(i+1, end, target-i, temp); // 数字不重复
                    temp.remove(temp.size() - 1);
                } else {
                    return;
                }
            }
        }
    }
}

扩展

与这道题类似的有此题:加起来和为目标值的组合,这道题的解法也是受此题启发。

import java.util.ArrayList;
import java.util.Arrays;

public class SumTarget {
    private ArrayList<ArrayList<Integer>> result = new ArrayList<>();
    public ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) {
        if (num == null || num.length == 0 || target == 0) {
            return result;
        }
        ArrayList<Integer> temp = new ArrayList<>();
        Arrays.sort(num);
        combinationSum(num, 0, num.length, target, temp);
        return result;
    }

    private void combinationSum(int[] num, int start, int end, int target, ArrayList<Integer> temp) {
        if (target == 0) {
            ArrayList<Integer> copy = new ArrayList<>(temp);
            result.add(copy);
            return;
        }
        for(int i=start; i<end; i++) {
            if (i>start && num[i] == num[i-1]) {
                continue;
            }
            if (num[i] <= target) {
                temp.add(num[i]);
                combinationSum(num, i+1, num.length, target-num[i], temp);
                temp.remove(temp.size()-1);
            } else {
                return;
            }
        }
    }

    public static void main(String[] args) {
        SumTarget sumTarget = new SumTarget();
        int[] num = new int[]{100, 10, 20, 70, 60, 10, 50};
        int target = 80;
        System.out.println(sumTarget.combinationSum2(num, target));
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个数字m、n,输出[1,m]范围内所有和为n的组合 的相关文章

随机推荐

  • 【图像识别】基于支持向量机svm植物叶子疾病检测和分类

    最近在学习svm算法 借此文章记录自己的学习过程 在学习很多处借鉴了z老师的讲义和李航的统计 若有不足的地方 请海涵 svm算法通俗的理解在二维上 就是找一分割线把两类分开 问题是如下图三条颜色都可以把点和星划开 但哪条线是最优的呢 这就是
  • java jmap用法_java命令--jmap命令使用

    jdk安装后会自带一些小工具 jmap命令 Java Memory Map 是其中之一 主要用于打印指定Java进程 或核心文件 远程调试服务器 的共享对象内存映射或堆内存细节 jmap命令可以获得运行中的jvm的堆的快照 从而可以离线分析
  • 设计模式6-命令模式(Command)解析+案例实践+总结

    本文是对面向对象设计模式 命令模式 Command 的解析 主要分为定义解析 通过餐厅点餐案例 遥控器案例讲解命令模式 多案例练习加深对命令模式的理解 最后总结知识要点 第一篇 定义解析 命令模式是GoF四人帮整理的 设计模式 可复用面向对
  • mysql语句声明外键

    环境 在Navicat 中进行mysql的语句操作 示例 1 创建一张员工表 CREATE TABLE employ id INT PRIMARY KEY ename VARCHAR 20 deptId INT 2 插入员工数据 INSER
  • NodeJs的应用场景及实践

    前几天看到一篇文章 据说是WordPress4 3将用NodeJs重写 着实让人有点惊讶 后来了解到 其实并不是完全摒弃PHP 而是由NodeJs重写部分核心类 具体文章链接来源 附上链接 WordPress 4 3 将用 Node js
  • 驱动怎么学

    1 什么是驱动 1 1理解驱动的概念 1 驱动一词的字面意思 驱动就是让一个东西动起来 给一个东西动力 让它动起来 2 物理上的驱动 比如 一个球放在那儿没动 你踢了一下它 给了它一个力 给了力之后它就能动 就说明你驱动了它 这就是物理学上
  • 召唤神龙无敌版,轻松召唤神龙~

    还在被鲨鱼围着追吗 快来试试无敌版轻松通关 最新召唤神龙无敌版 地址 http minigame suyiboke com zhaohuanshenlongwdb index html 备用地址 推荐 https suyiboke com
  • osg与opengl中向量、矩阵的区别

    osg中的向量是行向量 矩阵相应也是与行向量对应 v M 矩阵最后一行对应的是平移 其它行列对应旋转和缩放 对角线元素值对应缩放值 inline void Matrixd preMultTranslate const Vec3d v for
  • GENERIC NETLINK 介绍及使用

    之前一篇博文讲述了Netlink如何使用 当时我们是自己定义了一种协议NETLINK TEST进行用户进程和内核的通信 这篇文章就讲一下如何使用内核为我们提供的NETLINK GENERIC进行通信 如果把Netlink协议比作IP层 那么
  • 从GitHub火到了博客,共计1658页的《Java岗面试核心MCA版》,拿走不谢

    2019年我凭借一份 Java面试核心知识点 成功拿下了阿里 字节 小米等大厂的offer 两年的时间 为了完成我给自己立的flag 拿下一线互联网企业offer大满贯 即使在职也一直在不断的学习与备战面试中 不得不说程序员除了做项目之外
  • 华为8月8日将推出系统云翻新功能:P40/Mate 30系列首发

    7月28日消息 7月28日消息 华为终端公司近日在微博上发布重要公告 宣布将于8月8日推出全新的系统云翻新功能 据悉 该功能将首次应用于华为 P40 系列手机和 Mate30 系列手机 为用户提供更便捷的手机数据备份和恢复体验 系统云翻新功
  • 在ubuntu上安装Ocaml的RPM包的一点经验

    今天想在ubuntu上安装ocaml 3 10 1 1 fc7 src rpm 遇到了一些问题 其实很简单 但是记录下来防止以后忘了 如果输入 sudo apt get install alien ocaml 3 10 1 1 fc7 sr
  • Linux环境下MySQL的数据目录

    MySQL的数据目录 数据库文件的存放路径 MySQL数据库文件的存放路径 var lib mysql mysql gt show variables like datadir Variable name Value datadir var
  • sqlserver链接服务器实现远程联库查询

    1 新建链接服务器 使用SQL Server Management Studio 右键新建链接服务器 在 常规 页面下输入链接服务器名 选择服务器类型为SQL Server 这里看个人需要 在 安全性 页面下选择 使用此安全上下文进行连接
  • 怎样通过一根网线,一台电脑,做到月入过万。

    赚钱 就是开眼 复制 创新 规模 什么是 开眼 看足够多的案例信息 什么是 复制 将底层逻辑为我所用 什么是 创新 取其精华 去其糟粕 什么是 规模 抓住机会 快马加鞭 今天就把我的人脉圈里 做得比较优秀的朋友介绍给大家 希望能给你们带来一
  • 航天生物计算机作文,我与航天作文

    我与航天作文 一觉醒来 又是美好的一天 按照惯例 起床 穿衣服 咦 我的衣服呢 诶 我怎么不在家里 我拖着沉重的眼皮环视四周 咦 怎么都是陨石呢 我发现我已经置身与太空中 并且可以呼吸 我看到了星河 太阳 地球据说 火星上有生命体 但不能肯
  • 用VB调用Webservice

    关键字 VB WebService C 调试环境 vb6 sp5 Vs net 2005 SOAP Toolkit 3 0 在VB中调用Webservice先要安装Soap Toolkit 可以到微软的网站上下载 下载地址为 http ww
  • 在linux系统中离线安装postgresql和postgis亲测可用

    离线用到的包 百度链接 https pan baidu com s 14baq72bveIWMbN89tvEgXQ 提取码 573f 我是把防火墙关了的 方便连接数据库 关闭防火墙 systemctk stop firewalld 一 离线
  • Qt5.4 QDialog窗体圆角时圆角透明背景是黑色的解决方法

    运行环境 framebuffer armlinux系统 qt5 4 设置这两句 setAttribute Qt WA TranslucentBackground setWindowFlags Qt FramelessWindowHint 通
  • 两个数字m、n,输出[1,m]范围内所有和为n的组合

    题目 输入两个数 m n 输出 1 m 范围内所有和为 n 的组合 样例输入 5 3 样例输出 1 1 1 1 2 3 代码 说明 如果要求组合内数字不重复 可以用 getResult i 1 end target i temp impor