当前位置:首页 » 操作系统 » java组合排列算法

java组合排列算法

发布时间: 2022-03-12 22:33:22

java排列组合算法如题:用x、y,求出指定长度的所有排列组合。

按照你的要求编写的求x,y指定长度的所有排列组合的Java程序如下

importjava.util.ArrayList;
importjava.util.List;
publicclassEE{
publicstaticvoidcombination(List<String>list,StringsNumbers,StringsPath,intALen)
{
if(sPath.length()==ALen)
{
list.add(sPath);
return;
}
for(inti=0;i<sNumbers.length();i++)
{

combination(list,sNumbers,sPath+sNumbers.substring(i,i+1),ALen);
}
}
publicstaticvoidmain(String[]args){
List<String>output=newArrayList<String>();
System.out.println("组合");
combination(output,"xy","",5);
for(Strings:output)
System.out.print(s+"");
System.out.println();
System.out.println("共"+output.size()+"个");
}
}

运行结果

组合

xxxxx xxxxy xxxyx xxxyy xxyxx xxyxy xxyyx xxyyy xyxxx xyxxy xyxyx xyxyy xyyxx xyyxy xyyyx xyyyy yxxxx yxxxy yxxyx yxxyy yxyxx yxyxy yxyyx yxyyy yyxxx yyxxy yyxyx yyxyy yyyxx yyyxy yyyyx yyyyy

共32个

❷ JAVA 全排列算法

递归实现,取数字(字符串)中第i个位置的字符,然后将他和剩余的字符拼接,剩余的字符串当成有一个全排列的输入,这样递归下去,只剩一个字符时全排列就是本身。程序中使用set去除了重复的数据,如果需要保留,将set换为list接口即可。

package mytest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/*
* @date:2012-2-8
* @author:
*
* 输入一个数字,讲输出 1到这个数字的全排列
*/
public class MyDemo2 {

private static Set<String> SET_STRING = new HashSet<String>();
private static Set<Long> SET_NUM = new HashSet<Long>();

public static void main(String[] args) {
System.out.println("begin ...... ");
testLong(234);
testString("a23");

print(SET_NUM);
print(SET_STRING);
System.out.println("end ...... ");
}

/**
* 测试数字
* @param num
*/
private static void testLong(long num){
long testNum = num;
String[] permutation;

for(long l=0; l<=testNum; l++){
permutation = getAllOrder(String.valueOf(l));
for (int i = 0; i < permutation.length; i++) {
SET_NUM.add(Long.valueOf(permutation[i]));
}
}
}

/**
* 测试字符串
* @param str
*/
private static void testString(String str){
String[] permutation = getAllOrder(str);
for (int i = 0; i < permutation.length; i++) {
SET_STRING.add(permutation[i]);
}
}

private static void print(Set set){
System.out.println("/*****************************************************/");
int i=0;
for(Iterator it = set.iterator(); it.hasNext();){
i++;
if(i%10 == 0){
System.out.println();
}
System.out.print(it.next() + " ");
}
System.out.println();
System.out.println("/*****************************************************/");
}

/**
* 递归算法 全排列 去除重复
* @param str
* @return
*/
private static String[] getAllOrder(String str) {
String [] arrResult = null;
Set<String> set = new HashSet<String>();

if(str.length()>1){
String result = "";
String charXInString;
String remainString;
for (int i = 0; i < str.length(); i++) {
charXInString = str.charAt(i) + "";
remainString = str.substring(0, i)+ str.substring(i + 1, str.length());
for (String element : getAllOrder(remainString)) {
result = charXInString + element;
set.add(result);
}
}
arrResult = set.toArray(new String[set.size()]);
}else{
arrResult = new String[]{str};
}
return arrResult;
}

}

❸ 在java中,谁有好的算法可以将多个list进行组合

//回答完毕,采纳即可

importjava.util.Arrays;
importjava.util.LinkedList;

publicclassTT
{
privatestaticLinkedList<String[]>recursionSub(LinkedList<String[]>list,intcount,String[][]array,intind,
intstart,int...indexs)
{
start++;
if(start>count-1)
{
returnnull;
}
if(start==0)
{
indexs=newint[array.length];
}
for(indexs[start]=0;indexs[start]<array[start].length;indexs[start]++)
{
recursionSub(list,count,array,0,start,indexs);
if(start==count-1)
{
String[]temp=newString[count];
for(inti=count-1;i>=0;i--)
{
temp[start-i]=array[start-i][indexs[start-i]];
}
list.add(temp);
}
}
returnlist;
}

publicstaticvoidmain(String[]args)
{
String[]s1={"a","b","c"};
String[]s2={"d","e","f"};
String[]s3={"x","y","z"};
String[][]temp={s1,s2,s3};

LinkedList<String[]>list=newLinkedList<String[]>();
recursionSub(list,temp.length,temp,0,-1);
for(inti=0;i<list.size();i++)
{
System.out.println(Arrays.toString(list.get(i)).replaceAll("[\[\]\,\s]",""));
}
}
}

❹ JAVA模拟排列组合

全排列?
用指针啊

❺ java算法问题 排列组合 给定一组字符串,产生所有可能的集合

这是我写的一个取组合的方法:
package Combination.c3;
import java.util.ArrayList;
import java.util.List;

public class Combinations {

/*
* 设有n个元素,组合数量有2的n次方种。
* 对 0 到 2的n次方-1 中的每个数,考察其二进制位形式,位数为1代表相应元素加入
* 到组合,0则不加入该元素至组合。
*
* 取组合方法
* 参数: list ---- 原始数组
* 返回: 包含所有组合数组的数组
*/
public static List<List<Object>> getCombinations(List<Object> list) {
List<List<Object>> result = new ArrayList<List<Object>>();
long n = (long)Math.pow(2,list.size());
List<Object> combine;
for (long l=0L; l<n; l++) {
combine = new ArrayList<Object>();
for (int i=0; i<list.size(); i++) {
if ((l>>>i&1) == 1)
combine.add(list.get(i));
}
result.add(combine);
}
return result;
}

//测试
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<Object>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("i");
list.add("j");

List<List<Object>> result = getCombinations(list);
System.out.println(list.toString());
System.out.println(result.toString());
}

}

❻ java排列组合的算法 譬如我有(A,B,C,D),我想输出的结果是

importstaticjava.lang.System.*;
importjava.util.*;
publicclassTest{
publicstaticvoidmain(String...args){
ArrayList<String>l=newArrayList<String>();
out.println("请输入要排序的字母,输入$结束:");
while(true){
Scannersc=newScanner(in);
Stringstr=sc.nextLine();
if(str.equals("$"))break;
else
l.add(str);

}
Strings="";
System.out.println(s.isEmpty());
f(s,l);
}
staticvoidf(Strings,ArrayList<String>l){
if(s.isEmpty()){
for(inti=0;i<l.size();i++){
out.println(s+l.get(i));
if(i==l.size()-1)return;
f(s+l.get(i),l);
}
}else{
char[]c=newchar[1];
c[0]=s.charAt(s.length()-1);
Stringstr=newString(c);
for(inti=l.lastIndexOf(str);i<l.size();i++){
out.println(s+l.get(i+1));
if(i==l.size()-2)return;
f(s+l.get(i+1),l);
}
}
}
}
纯手打实验过了可以用..望采纳,有不懂的欢迎发问

❼ JAVA 排列组合改进算法 怎么实现

publicclassTest{
publicstaticvoidmain(String[]args){
String[]arr1={"a","b","c"};
String[]arr2={"h","h","j"};
String[]arr3={"x","y",};
for(inti1=0;i1<arr1.length;i1++){
for(inti2=0;i2<arr2.length;i2++){
for(inti3=0;i3<arr3.length;i3++){
System.out.print("{"+arr1[i1]+","+arr2[i2]+","+arr3[i3]+"},");
}
}
}
}
}

你看看对不对

❽ 求一个排列组合算法,需要有java源码

私信我,给你发代码。。。
希望可以帮助你,谢谢采纳。。。

❾ 用JAVA写一个a,b,c,d,e排列组合算法,谢谢了

public class Paixu {
public static void main(String[] args) {
char[] in = "abcde".toCharArray();

new Paixu().paixu(in, in.length, 0);
}

private void paixu(char[] array, int n, int k) {
if (n == k) {
char[] out = new char[n];
for (int i = 0; i < array.length; i++) {
out[i] = array[i];
}
System.out.println(new String(out));
} else {
for (int i = k; i < n; i++) {
swap(array, k, i);
paixu(array, n, k + 1);
swap(array, i, k);
}
}
}

private void swap(char[] a, int x, int y) {
char temp = a[x];
a[x] = a[y];
a[y] = temp;
}
}

热点内容
苹果手机怎么装安卓耳机 发布:2024-09-25 03:23:48 浏览:741
linuxgcc64位 发布:2024-09-25 03:14:19 浏览:742
文件夹恢复软件免费版 发布:2024-09-25 03:14:14 浏览:713
雅阁空调压缩机多少钱 发布:2024-09-25 03:13:38 浏览:22
手机在哪里找到解锁密码 发布:2024-09-25 03:09:21 浏览:995
宏被默认脚本 发布:2024-09-25 03:04:27 浏览:705
交叉编译x264 发布:2024-09-25 02:58:59 浏览:437
安卓手机cpu关闭后怎么打开 发布:2024-09-25 02:47:56 浏览:33
什么配置的电子垃圾最好 发布:2024-09-25 02:41:57 浏览:526
如何租用云服务器挖fil 发布:2024-09-25 02:21:19 浏览:614