
正文
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步就已经算出来了,不用再考虑了。
按照这样的规则进行下去,你会发现这样就把所有的组合数遍历出来了。要具体的代码就等会儿,我现在有事。
相关问答
Q1: java实现排列组合
char[] a={'1','2','3','4'};
String b= "";
String c= "";
for (int i = 0; i a.length-1; i++) {
b="["+a[i]+","+a[i+1]+"]";
c+=b;
}
System.out.println(c);
Q2: 求解释一段代码,关于Java中排列组合的问题
ArrayListCharacter
newblist=new
ArrayListCharacter(blist);
是用blist的值创建一个新的ArrayList
如果
newblist
=
blist;这样,那两个ArrayList使用的是同一个引用,操作一个会影响另一个。
------------------------------------------------------------------------------------------------------------------------
这个代码的递归思想是这样的。
alist是数据,blist是结果
循环alist,创建出一个newalist备份,将alist中的一个元素添加到newblist.add(alist.get(i));中,
并在newalist中删除。
将这两个新的对象递归下去。
[1,2,3]
[]
[2,3]
[1]
[3]
[1,2]
--------------------
递归使用的是新创建的list
所以方法结束后,对alist,blist没有影响
[2,3]
[1]
[2]
[1,3]
Q3: 将两个数组 排列组合到一个数组集合 求java 代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
private String[] arr1;
private String[] arr2;
public Test(){
//数组长度可以随意改,但必须保证两个数组长度一样
arr1 = new String[3];
arr2 = new String[3];
initArray();
}
private void initArray(){
Scanner scanner = new Scanner(System.in);
for(int i=0;iarr1.length;i++){
arr1[i] = scanner.next();
}
for(int i=0;iarr2.length;i++){
arr2[i] = scanner.next();
}
}
/**
* 获取组合后的数组表单
* @return
*/
private ListString[] getcombineList(){
ListString[] list = new ArrayListString[]();
combineArray(list, arr1, arr2);
combineArray(list, arr2, arr1);
return list;
}
/**
* 遍历数组str1,并将其复制到新的数组,再将str2中索引值与str1中索引值
* 相同的元素放入新的数组,然后将新的数组放入list中
* @param list
* @param str1
* @param str2
*/
private void combineArray(ListString[] list,String[] str1, String[] str2){
for(int i=0; istr1.length; i++){
String[] str = new String[str1.length];
for(int j=0; jstr2.length; j++){
str[j] = str2[j];
if(i == j)
str[j] = str1[j];
}
System.out.println(getArrayMessage(str));
list.add(str);
}
}
/**
* 将数组每一个元素组合成字符串
* @param str 字符串数组
* @return 组合字符串
*/
private String getArrayMessage(String[] str){
StringBuffer buffer = new StringBuffer();
for(int i=0; istr.length; i++){
if(i == str.length-1)
buffer.append(str[i]);
else
buffer.append(str[i]).append(",");
}
return buffer.toString();
}
public static void main(String[] argv){
Test test = new Test();
test.getcombineList();
}
}
Q4: 输入任意字符序列,输出所有两位数的排列组合JAVA代码?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 创建Scanner对象java排列组合代码,用于获取用户输入
Scanner scanner = new Scanner(System.in);
System.out.print("请输入任意字符序列java排列组合代码:");
// 获取用户输入java排列组合代码的字符序列
String str = scanner.nextLine();
// 循环遍历字符序列中的每个字符
for (int i = 0; i str.length(); i++) {
// 获取字符序列中的第i个字符
char c1 = str.charAt(i);
// 循环遍历字符序列中的每个字符
for (int j = 0; j str.length(); j++) {
// 获取字符序列中的第j个字符
char c2 = str.charAt(j);
// 如果第i个字符不等于第j个字符,则输出它们的排列
if (i != j) {
System.out.println(c1 + "" + c2);
}
}
}
}
}
java排列组合代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java求组排序、java排列组合代码的信息别忘了在本站进行查找喔。







