java组合排列算法
❶ 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;
}
}