java 构建 数字 list_数字全排列返回list的list:java实现
程序实际很简单,是一个递归的过程。过程如下:
括号里是传进去的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实现相关推荐
- java 分治法排序_分治法实现1-N的数字按字典序全排列组合 Java语言
package 分治法; import java.util.Arrays; /* * 将数字 1 - n进行全排列 按字典序从小到大输出 * 如 1 - 3 * 123 132 213 231 312 ...
- java文本框输入数字_Java 文本框输入数字限制以及输入数字大小限制
问题: 之前我有一篇博文也写了这个问题,也是使用的字符串来控制文本框的输入数字 不过,那篇博文给的方法只能限制数字输入,以及数字输入长度的限制 今天给出可以限制输入数字大小的方法,例如:希望输入的数字 ...
- java moment 日期转换_关于日期:如何使用Java 8 DateTime API转换修改后的儒略日数字...
我有一个数据库,用于存储日期和日期时间(分别为INTEGER和DOUBLE)作为已修改的儒略日数(MJD).修改后的儒略日数是自1858年11月17日午夜UTC以来连续的天数.根据定义,它们始终以UT ...
- java输出两个整数的积_如何检查Java中的两个数字相乘是否会导致溢出?
如何检查Java中的两个数字相乘是否会导致溢出? 我想处理两个数字相乘导致溢出的特殊情况. 代码看起来像这样: int a = 20; long b = 30; // if a or b are bi ...
- java中bitconverter_【Java】BitConverter(数字转字节数组工具类)
import java.nio.ByteOrder; import java.nio.charset.Charset; /** * 数字转字节数组工具类 */ public class BitConv ...
- Java对字符串中数字进行按自然顺序排序
Java对字符串中数字进行按自然顺序排序 import java.util.Arrays;public class Test01 {public static void main(String[] a ...
- java中NumberFormat 、DecimalFormat的介绍及使用,java数字格式化,BigDecimal数字格式化
文章目录 前言 一.NumberFormat 1.概述 2.实例化方法 3.货币格式化 4.百分比格式化 5.NumberFormat的坑 5.1.不同的格式化对象处理相同数值返回结果不同 问题 源码 ...
- java判断是否为数字(JAVA判断输入是否是数字)
java如何写一个方法判断传进来的参数是否数字 /** * class名:JudgeIfNumeral * class说明:java如何写一个方法判断传进来的参数是否数字 * @author Jr p ...
- java计算机毕业设计计算机数字逻辑在线学习系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计计算机数字逻辑在线学习系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计计算机数字逻辑在线学习系统MyBatis+系统+LW文档+源码+调试部署 本源码技 ...
最新文章
- 独家福利 | 科大讯飞全球1024开发者节限时免费门票!
- 20155201 网络攻防技术 实验六 信息搜集与漏洞
- TCP/IP和UDP的区别
- java中文乱码问题的原因是什么?怎么解决中文乱码问题?
- Linux的实际操作:文件目录类的实用指令(ln history)
- SaaS 通识系列 1:云计算是什么
- sqlserver2000分页
- foremost命令参数中文说明
- 这些年,这些ACM大佬-吴作凡访谈
- 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出
- 参股商业银行重点上市公司一览表
- RocketMQ消息存储学习
- 芯片封装测试CP,FT,WT基本概念
- 简明扼要阐述synchronized和lock的区别
- React通过后台图片路径,打包下载图片
- PMEdit一个富文本框可以编辑文本、图片并可以显示GIF动画
- div设置滚动条和滚动条属性
- Java Poi word 插入图片并添加边框
- 过去的互联网,modnet的出现
- 支付宝技术专家李战斌:安防视频行为分析系统的技术演进及应用场景 | 2018FMI人工智能与大数据高峰论坛(深圳站)
热门文章
- qt设置窗口不在任务栏上显示
- Micropython教程之TPYBoard DIY金属探测仪实例演示(萝卜学科编程教育)
- 计算机网络网络层重要概念
- jquery $.each()遍历array,map等集合
- swoole实现Timer定时器、心跳检测及Task进阶实例:mysql连接池
- Debian GNU/kFreeBSD是什么
- 使用ffmpeg快速生成视频截图
- C# 控件BackColor = Color.Transparent没有透明的原因
- [转载]遗传算法介绍
- OptaPlanner 轻量级规划调度引擎