题目,得到某个数组,比如【1,2,3】 获得其全部的排列组合,包括1个数字的。2个数字的,和三个数字的等等。
import java.util.Stack;
/**
* JAVA获得一个数组的指定长度的排列组合。<br>
*
* @author JAVA世纪网(java2000.net, laozizhu.com)
*/
public class TestSequenceAll {
public static void main(String[] args) {
TestSequenceAll t = new TestSequenceAll();
Object[] arr = { 1, 2, 3 };
// 循环获得每个长度的排列组合
for (int num = 1; num <= arr.length; num++) {
t.getSequence(arr, 0, num);
}
}
// 存储结果的堆栈
private Stack<Object> stack = new Stack<Object>();
/**
* 获得指定数组从指定开始的指定数量的数据组合<br>
*
* @param arr 指定的数组
* @param begin 开始位置
* @param num 获得的数量
*/
public void getSequence(Object[] arr, int begin, int num) {
if (num == 0) {
System.out.println(stack); // 找到一个结果
} else {
// 循环每个可用的元素
for (int i = begin; i < arr.length; i++) {
// 当前位置数据放入结果堆栈
stack.push(arr[i]);
// 将当前数据与起始位置数据交换
swap(arr, begin, i);
// 从下一个位置查找其余的组合
getSequence(arr, begin + 1, num - 1);
// 交换回来
swap(arr, begin, i);
// 去除当前数据
stack.pop();
}
}
}
/**
* 交换2个数组的元素
*
* @param arr 数组
* @param from 位置1
* @param to 位置2
*/
public static void swap(Object[] arr, int from, int to) {
if (from == to) {
return;
}
Object tmp = arr[from];
arr[from] = arr[to];
arr[to] = tmp;
}
}
运行结果
[1]
[2]
[3]
[1, 2]
[1, 3]
[2, 1]
[2, 3]
[3, 2]
[3, 1]
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
分享到:
相关推荐
主要介绍了Java获得一个数组的指定长度排列组合算法,结合实例形式分析了java排列组合相关数组遍历、运算操作技巧,需要的朋友可以参考下
* 构造一个数组,必须指定长度。 数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。 3. 数组常见操作 数组创建后,我们经常需要对数组做两种最常见的操作:遍历、拷贝。 * 遍历指的就是“通过...
声明一个数组时仅为数组指定了数组名称和元素的类型,并未指定元素的个数,没有为数组元素分配内存,则不能使用数组存储数据。要让系统为数组元素分配内存,必须要指明数组元素的个数,并通过 New 运算符为数组元素...
//创建一个整型数组,长度为12 int [] arr = new int[12]; Random r = new Random(); for(int i = 1;i ;i ) {//长生10个随机数,并赋给数组arr arr[i] = r.nextInt(1000); } //输出数组arr中的元素...
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们. 数组的三个基本特点: 1. 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 2. 其元素必须是相同类型,不允许出现混合...
在 Java 中,数组是一种引用型变量,两个数组如果有相同的引用(地址),它们就有相同的元素。数组的长度可以使用 x.length 获取,例如:int[] z = new int[2]; System.out.println(z.length);。 本章节介绍了 Java...
1、在main方法中创建一个含有10个元素的int型数组,进行以下操作:(1)将数组元素按照从小到大的顺序排列;(2)对排好序的数组使用折半查找(使用递归和非递归两种形式分别实现)查找某一个int元素。 2、使用一维...
二维数组,可以看成一维数组array1作为另一个一维数组array2元素而存在,从数组底层运行机制来看,其实没有多维数组。 二维数组的元素存放的是各个一维数组的地址值,引用。 Arrays工具类的使用 public static ...
数组是相同类型数据的有序集合,数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点: 长度是确定...
2.编写程序,将两个各有6个整数的数组,合并成一个由小到大排列的数组,(该数组的长度为12)*/ 3.一个球从100米高度自由落下后,反弹回原来高度的一半。按此规律,到第10次落地时,行程共有多少米? * 然后将反弹起多高...
然后再遍历数组得到对应的序号(数组下标加1),又或者想到一个个从小到大的生成push进数组,然后判断该数是不是当前题目给的数,如果是的话要求的序号就是当前数组的长度,比前面好的一点的是不用浪费时间去计算生成...
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,...
创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同。解法如下: int[] arr = new int[6]; //随机生成1-30范围内数字 for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31) arr[i] ...
这样,每进行一轮比较和交换操作,就会有一个元素被放置到其最终位置上,这个过程像气泡一样上浮到数组的顶端。随后,算法再从头开始,重复之前的比较和交换操作,直到整个数组被正确排序。 冒泡排序算法的复杂度为...
1、在main方法中创建一个含有10个元素的int型数组,进行以下操作:(1)将数组元素按照从小到大的顺序排列;(2)对排好序的数组使用折半查找(使用递归和非递归两种形式分别实现)查找某一个int元素。 2、使用一维...
给定两个字符串,编写一个方法来判断一个字符串是否是另一个字符串的排列。 编写一个方法,用“ ”替换字符串中的所有空格。 您可以假设字符串的末尾有足够的空间来容纳附加字符,并且您会得到字符串的“真实”长度...
然后利用数组 key 来对数组 S 做一个置换,也就是对 S 数组里的数重新排列,排列算法为: for i from 0 to 255 S[i] := i end for j := 0 for i from 0 to 255 j := (j + S[i] + key[i mod keylength]) mod 256 ...
实例014 使当前项目依赖另一个项目 21 1.3 界面设计器 22 实例015 安装界面设计器 22 实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 ...
检查排列:给定两个字符串,编写一个方法来判断一个是否是另一个的排列。 提示:#7、#84、#722、#737 1.3 URLify:编写一个方法,用' '替换字符串中的所有空格。 您可能会假设字符串末尾有足够的空间来容纳附加字符...