程序实际很简单,是一个递归的过程。过程如下:

括号里是传进去的begin和end参数,而后面跟的数字是进入之后需要循环的次数。

这个程序也更让我理解了,递归程序的过程:

好比是一个人在执行任务,在执行过程中有很多分叉,如果有分叉的情况,就分叉的情况扔到栈中去,因为栈是先进后出的,所以用栈符合要求。同地位的分叉总有先后顺序,这个人走到第一个分叉的第一个分叉,一直到第一个到达的终点,到达终点后,到栈中去看分叉情况,如果还有分叉就继续执行到下一个终点。重点在于到了终点就返回上一层(返回到上一层调用的函数那行),完成上一层没有执行完的工作,如果上一层没事了,就看上一层的上一层,以此类推。

开始我有疑问,递归函数中,对数组的引用一直是同一个引用,但还一直在swap,这样能对吗?原来是每次循环中,最后一行又把交换的元素换回来了,这样就为下一次循环,即同地位的分叉做好了准备。

代码如下:

package mianshi;

import java.util.ArrayList;

import java.util.List;

public class pailie {

public static List> permute(int[] nums)

{

List> all=new ArrayList>();

allSort(nums, 0, nums.length-1, all);

return all;

}

public static void allSort(int[] array,int begin,int end,List> all)

{

if(begin==end){

List origi=new ArrayList();

for(int a:array)

{

origi.add(a);

}

all.add(origi);

return;

}

for(int i=begin;i<=end;i++){

swap(array,begin,i );

allSort(array, begin+1, end,all);

swap(array,begin,i );

}

}

public static void swap(int[] array,int a,int b){

int tem=array[a];

array[a]=array[b];

array[b]=tem;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] a={1,2,3,4};

permute(a);

for(List b:permute(a))

{

for(int c:b)

{

System.out.println(c);

}

}

}

}

java 构建 数字 list_数字全排列返回list的list:java实现相关推荐

  1. java 分治法排序_分治法实现1-N的数字按字典序全排列组合 Java语言

    package 分治法; import java.util.Arrays; /* * 将数字 1 - n进行全排列 按字典序从小到大输出 * 如 1 - 3 * 123 132 213 231 312 ...

  2. java文本框输入数字_Java 文本框输入数字限制以及输入数字大小限制

    问题: 之前我有一篇博文也写了这个问题,也是使用的字符串来控制文本框的输入数字 不过,那篇博文给的方法只能限制数字输入,以及数字输入长度的限制 今天给出可以限制输入数字大小的方法,例如:希望输入的数字 ...

  3. java moment 日期转换_关于日期:如何使用Java 8 DateTime API转换修改后的儒略日数字...

    我有一个数据库,用于存储日期和日期时间(分别为INTEGER和DOUBLE)作为已修改的儒略日数(MJD).修改后的儒略日数是自1858年11月17日午夜UTC以来连续的天数.根据定义,它们始终以UT ...

  4. java输出两个整数的积_如何检查Java中的两个数字相乘是否会导致溢出?

    如何检查Java中的两个数字相乘是否会导致溢出? 我想处理两个数字相乘导致溢出的特殊情况. 代码看起来像这样: int a = 20; long b = 30; // if a or b are bi ...

  5. java中bitconverter_【Java】BitConverter(数字转字节数组工具类)

    import java.nio.ByteOrder; import java.nio.charset.Charset; /** * 数字转字节数组工具类 */ public class BitConv ...

  6. Java对字符串中数字进行按自然顺序排序

    Java对字符串中数字进行按自然顺序排序 import java.util.Arrays;public class Test01 {public static void main(String[] a ...

  7. java中NumberFormat 、DecimalFormat的介绍及使用,java数字格式化,BigDecimal数字格式化

    文章目录 前言 一.NumberFormat 1.概述 2.实例化方法 3.货币格式化 4.百分比格式化 5.NumberFormat的坑 5.1.不同的格式化对象处理相同数值返回结果不同 问题 源码 ...

  8. java判断是否为数字(JAVA判断输入是否是数字)

    java如何写一个方法判断传进来的参数是否数字 /** * class名:JudgeIfNumeral * class说明:java如何写一个方法判断传进来的参数是否数字 * @author Jr p ...

  9. java计算机毕业设计计算机数字逻辑在线学习系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计计算机数字逻辑在线学习系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计计算机数字逻辑在线学习系统MyBatis+系统+LW文档+源码+调试部署 本源码技 ...

最新文章

  1. 独家福利 | 科大讯飞全球1024开发者节限时免费门票!
  2. 20155201 网络攻防技术 实验六 信息搜集与漏洞
  3. TCP/IP和UDP的区别
  4. java中文乱码问题的原因是什么?怎么解决中文乱码问题?
  5. Linux的实际操作:文件目录类的实用指令(ln history)
  6. SaaS 通识系列 1:云计算是什么
  7. sqlserver2000分页
  8. foremost命令参数中文说明
  9. 这些年,这些ACM大佬-吴作凡访谈
  10. 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出
  11. 参股商业银行重点上市公司一览表
  12. RocketMQ消息存储学习
  13. 芯片封装测试CP,FT,WT基本概念
  14. 简明扼要阐述synchronized和lock的区别
  15. React通过后台图片路径,打包下载图片
  16. PMEdit一个富文本框可以编辑文本、图片并可以显示GIF动画
  17. div设置滚动条和滚动条属性
  18. Java Poi word 插入图片并添加边框
  19. 过去的互联网,modnet的出现
  20. 支付宝技术专家李战斌:安防视频行为分析系统的技术演进及应用场景 | 2018FMI人工智能与大数据高峰论坛(深圳站)

热门文章

  1. qt设置窗口不在任务栏上显示
  2. Micropython教程之TPYBoard DIY金属探测仪实例演示(萝卜学科编程教育)
  3. 计算机网络网络层重要概念
  4. jquery $.each()遍历array,map等集合
  5. swoole实现Timer定时器、心跳检测及Task进阶实例:mysql连接池
  6. Debian GNU/kFreeBSD是什么
  7. 使用ffmpeg快速生成视频截图
  8. C# 控件BackColor = Color.Transparent没有透明的原因
  9. [转载]遗传算法介绍
  10. OptaPlanner 轻量级规划调度引擎