java代码的组合 java实现组合

求java实现String list[] = { "1", "2", "3" }; 的排列组合代码对于这个问题 , 我首先需要纠正一下楼主的措辞,这是个组合问题,跟排列无关,用排列组合亦不恰当 。下面说下我的想法
元素不能重复,首先应该去掉相同的元素,最好的办法是用set来实现 。参考api
Arrays.asList
set.addAll
其实呢 , 这个是一个递归的过程,考虑下面情况
对于数组
{“1”},它的组合数就是{“1”} 。
如果再加上一个元素“2“到上面的数组中,那么,如果这个”2“不用,实质上跟{"1"}的情况是一样的,这与不能重复相矛盾,所以”2“一定要用,就是在"1"中再加上”2“;于是我们得到
对于数组{”1“,”2“}它的组合数是{”1“}
再加入一个{”2“} 。也许你也考虑到另外一种情况,即”2“也是它的一个组合数 , 我们考虑丢了 , 为什么呢 , 因为在{”1“}中实质上还有一个称为空的集合 。这样的话 , 重新整理一下:
1.对于list
=
{"1"},它的组合包括
{"1"},以及
empty.
2.对于list={"1","2"},它的组合包括{”1“,”2“}(在{”1“}中加了”2“) , {”2“}(在empty中加入”2“) , 也许你还会讲还应该包括{”1“},但是这个{”1“}我们已经在第1步就已经算出来了,不用再考虑了 。
按照这样的规则进行下去,你会发现这样就把所有的组合数遍历出来了 。要具体的代码就等会儿,我现在有事 。
用Java代码编码: 有1~8个号码,需要选择6个出来,组成不同的组合,不处理顺序,只关注重复,详情如下,如果不管排序java代码的组合的话递归 循环都能实现这个给java代码的组合你一个分别用递归和循环实现java代码的组合的例子
import java.util.Arrays;
public class TestArray {
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 5, 6, 7, 8};
System.out.println("***********循环*************");
ergodicArray(a, 6);
System.out.println("***********递归*************");
recursionArray(a,new int[6],0,0);
}
//递归
public static void recursionArray(int[] a,int[] b,int start,int index){
if(b.lengtha.length)
throw new RuntimeException("长度错误");
else{
if(indexb.length){
int[] c=b.clone();
for(int i=start;ia.length;i){
//System.out.println("i:" i " index:" index);
c[index]=a[i];
recursionArray(a,c,i 1,index 1);
}
}else
System.out.println(Arrays.toString(b));
}
}
//循环
public static void ergodicArray(int[] a,int length){
if(lengtha.length)
throw new RuntimeException("长度错误");
else{
int[] b=new int[length];
for(int i=0;ilength;i)
b[i]=i;
ergodicArray(a,b);
}
}
public static void ergodicArray(int[] a, int[] b) {
while (b[0] = (a.length - b.length)) {
if (b[b.length - 1]a.length) {
for (int i = 0; ib.length; i) {
System.out.print(a[b[i]]);
if(ib.length-1)
System.out.print(',');
}
System.out.println();
b[b.length - 1];
} else {
int j = b.length - 1;
while (j = 0) {
if (b[j] != a.length - (b.length - j)1) {
// j--;
break;
} else
j--;
}
if ((b[0] == (a.length - b.length - 1) || b[j] = (a.length - b.lengthj))) {
int t = 0;
for (int i = j; ib.length; i) {
if (i == j) {
b[i];
} else {
b[i] = b[i - 1]1;
}
}
}
}
}
}
求解释一段代码,关于Java中排列组合的问题ArrayListCharacter
newblist=new
ArrayListCharacter(blist);
是用blist的值创建一个新的ArrayList
如果
newblist
=
blist;这样,那两个ArrayList使用的是同一个引用,操作一个会影响另一个 。
------------------------------------------------------------------------------------------------------------------------
这个代码的递归思想是这样的 。
alist是数据,blist是结果
循环alist , 创建出一个newalist备份,将alist中的一个元素添加到newblist.add(alist.get(i));中 ,
并在newalist中删除 。
【java代码的组合 java实现组合】将这两个新的对象递归下去 。
[1,2,3]
[]
[2,3]
[1]
[3]
[1,2]
--------------------
递归使用的是新创建的list
所以方法结束后,对alist,blist没有影响
[2,3]
[1]
[2]
[1,3]
输入任意字符序列,输出所有两位数的排列组合JAVA代码?import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 创建Scanner对象,用于获取用户输入
Scanner scanner = new Scanner(System.in);
System.out.print("请输入任意字符序列:");
// 获取用户输入的字符序列
String str = scanner.nextLine();
// 循环遍历字符序列中的每个字符
for (int i = 0; istr.length(); i) {
// 获取字符序列中的第i个字符
char c1 = str.charAt(i);
// 循环遍历字符序列中的每个字符
for (int j = 0; jstr.length(); j) {
// 获取字符序列中的第j个字符
char c2 = str.charAt(j);
// 如果第i个字符不等于第j个字符,则输出它们的排列
if (i != j) {
System.out.println(c1""c2);
}
}
}
}
}
用java代码实现组合模式重载wolf1java代码的组合的构造函数使其接受一个animaljava代码的组合的实例java代码的组合,是为java代码的组合了外界代码传入animal实例,方便调用 。如果java代码的组合你直接new一个animal实例的话,在实际开发中一般都不现实,因为这样就写死了,如果animal实例类中还有很多数据字段(比如从数据库中加载)的话
java代码的组合的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于java实现组合、java代码的组合的信息别忘了在本站进行查找喔 。

    推荐阅读