我正在编写此函数,该函数要使用整数打印给定列表的所有子列表.这些整数的总和应等于给定的数字n.还有一个以值0开头的帮助变量i.列表和每个子列表都是ArrayList.因此,该方法现在看起来像这样:

public static void printSublists(ArrayList numbers, ArrayList sublist, int n,

int i) {

if (sublist.sum() == n) {

System.out.println(sublist.toString());

}

else {

for (int j = 0; j < numbers.size(); j++) {

sublist.add(numbers.get(i));

printSublists(numbers, sublist, n, i + 1);

sublist.remove(numbers.get(i));

}

}

}

当然我已经有了sum()方法.该方法现在执行此操作:

假设数字= [1、3、4]且n == 4,则该方法应打印[4]和[1,3],但仅打印[1、3]?我认为for循环必须做到这一点对吗?如果有人让我走上正确的道路,我将不胜感激.

更新:

我给该方法的值:

numbers = [1, 3, 4]

n = 4

i = 0

sublist = []

更新2:

我忘了说我希望它是递归的:)

解决方法:

当您看到第一个子列表的总和为n时,递归停止.问题不只是循环,而是退出标准.当子列表的长度为0时,递归函数应停止.

在这里,我只是为您的问题写了一个可行的递归解决方案.情况有所不同,但我无法解决您的问题.当您从一个空的子列表开始时,我选择使用完整列表来初始化递归,并将其划分为较小的子列表.这将创建一个树状结构:

[1234]

[123] [234]

[12] [23] [34]

[1][2] [3] [4]

我们立即看到,我们必须“向右”走直到到达第一片叶子(1),然后才“向左”走.这样,我们只访问一次所有子列表.

这是用Java编写的想法:

public static void main (String[] args) {

ArrayList list = new ArrayList();

list.add(1);

list.add(3);

list.add(4);

list.add(0);

printSublists(list, list, 4, true, 0);

}

public static void printSublists(List numbers, List sublist, int n, boolean walkRight, int level) {

// the test

if (sum(sublist) == n)

System.out.println(sublist);

// the exit criteia (leaf reached)

if (sublist.size() == 1)

return;

// visit the right sublist

if (walkRight)

printSublists(numbers, sublist.subList(0, sublist.size()-1), n, walkRight, level+1);

// we only walk the right path once

walkRight = false;

// visit the left sublist

printSublists(numbers, sublist.subList(1, sublist.size()), n, walkRight, level+1);

}

这就是输出:

[1, 3]

[4]

[4, 0]

标签:backtracking,subset-sum,java,recursion

来源: https://codeday.me/bug/20191101/1984691.html

java用递归的方式写n_java-使用递归将其元素加起来为n的子集的列表相关推荐

  1. python递归出口怎么写_Python进阶 —— 递归

    作者是一名沉迷于Python无法自拔的蛇友,为提高水平,把Python的重点和有趣的实例发在简书上. 递归 是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象.在计算机编程里,递归 ...

  2. java基础—采用递归的方式来获取相关目录下的子目录的名称

    采用递归的方式来获取相关目录下的子目录的名称 import java.io.File;//采用递归的方式来获取D盘下myjava目录下的所有子目录的名称 public class FileListDe ...

  3. 3a2b递归排列java,写点关于递归的话题(一)

    刚写了2颗树,里面用到了递归,顺着这个就随便写点关于递归的问题.这些问题都比较初级,也正应了这个blog的名字,当作一个学习和复习问题的笔记罢了. 记得我上学那会,C语言老师讲melloc内存那会就不 ...

  4. python构建二叉树_python--使用递归的方式建立二叉树

    树和图的数据结构,就很有意思啦. # coding = utf-8 class BinaryTree: def __init__(self, root_obj): self.key = root_ob ...

  5. Java类与面向对象(创建对象 成员方法 形参实参 递归 重载 可变参数 作用域 构造方法 this)

    文章目录 面向对象快速入门 对象在内存中存在形式 类与对象 属性注意事项 类与对象内存分配机制 类和对象的内存分配机制 Java创建对象的流程简单分析 成员方法快速入门 方法调用机制 为什么需要成员方 ...

  6. Java笔记整理六(File类,递归,字节流IO,字符流IO,流中的异常处理,属性集Properties,缓冲流,转换流,序列化,打印流)

    1.File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 文件和目录路径名的抽象表示 java把文件和文件夹封装位为一个File类,我们可 ...

  7. java递归算法经典实例_Java实现简单的递归操作方法实例

    前言 在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做"递归",这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的.虽然对于很多递归算法都可以由相应的 ...

  8. java SE(十一)——File、方法递归、IO流

    File.方法递归.IO流 File(定位.操作文件) 前言 File类概述 File类的常用API 判断文件类型.获取文件信息 创建文件.删除文件功能 遍历文件夹 方法递归 递归的形式和特点 递归的 ...

  9. Javascript用递归的方式遍历json数组

    前言 Javscript语言有很多值得探究和注意的地方,下面我们来看一下用递归的方式遍历JSON对象数组. 正文 假设我们的要遍历的数组是这样的: var array = [{id: 1,childr ...

最新文章

  1. linux中去掉^M的方法
  2. solr 函数使用之map
  3. 如何在TEASOFT中加入直线与曲线?
  4. 36岁自学python_Python语言基础
  5. 清除WIN2000中的Administrator账号密码
  6. HDU.5909.Tree Cutting(树形DP FWT/点分治)
  7. libevent源码学习-----event_base事件循环
  8. Scylla——开源免费的优秀代理 IP 池:自动验证、JSON API、基于 React 的 Web UI、Docker 支持...
  9. 希尔排序+移位法(吊打交换法)
  10. 做手游的计算机配置要求,原神pc配置要求高吗 最低什么配置能流畅运行​
  11. qt中关于按钮的click()函数卓见
  12. 前端如何实现网络速度测试功能_前端组件单元测试
  13. class matplotlib.markers.MarkerStyle(marker=None, fillstyle=None)
  14. MyBatis框架(6)动态sql
  15. 机器学习入门——多项式回归
  16. 前端轻量级的toolTip插件-Tippy.js
  17. 一些个人笔记,持续更新ing
  18. 乐游api接口平台(接口商)
  19. 自动控制原理笔记一(引论和拉普拉斯变换)
  20. 谈谈对代码审查Code Review的简单认识

热门文章

  1. Eclipse自动注册Servlet:web.xml注册和@Servlet注解 实现注册
  2. Java常用类之要点总结
  3. Java 动态代理介绍及用法
  4. [转]Ubuntu SCIM 输入法不能光标跟随的解决
  5. 【原创】设置头文件路径, gcc -I 选项写法
  6. [转]Vi 教程(Unix行编辑器)
  7. eclipse怎么创建web项目html,eclipse入门之创建第一个web程序(jsp测试环境)
  8. 手机上可以学python吗_Python爬虫也能用手机进行抓包?没错!这个技巧我只告诉你...
  9. flutter 图片路径_【Flutter开发工具推荐】Flutter资源管理利器:Flr
  10. vue打包后css路径_Vue打包后访问静态资源路径问题