当前位置:首页 » 编程语言 » java排列组合函数

java排列组合函数

发布时间: 2023-12-02 08:27:19

java 定义了5个数字的数组,显示输出所有的排列组合

importjava.util.ArrayList;
importjava.util.List;
publicclassPermAComb{
staticList<int[]>allSorts=newArrayList<int[]>();

publicstaticvoidpermutation(int[]nums,intstart,intend){
if(start==end){//当只要求对数组中一个数字进行全排列时,只要就按该数组输出即可
int[]newNums=newint[nums.length];//为新的排列创建一个数组容器
for(inti=0;i<=end;i++){
newNums[i]=nums[i];
}
allSorts.add(newNums);//将新的排列组合存放起来
}else{
for(inti=start;i<=end;i++){
inttemp=nums[start];//交换数组第一个元素与后续的元素
nums[start]=nums[i];
nums[i]=temp;
permutation(nums,start+1,end);//后续元素递归全排列
nums[i]=nums[start];//将交换后的数组还原
nums[start]=temp;
}
}
}

publicstaticvoidmain(String[]args){
int[]numArray={1,2,3,4,5,6};
permutation(numArray,0,numArray.length-1);
int[][]a=newint[allSorts.size()][];//你要的二维数组a
allSorts.toArray(a);

//打印验证
for(inti=0;i<a.length;i++){
int[]nums=a[i];
for(intj=0;j<nums.length;j++){
System.out.print(nums[j]);
}
System.out.println();
}
System.out.println(a.length);
}
}

采纳吧

㈡ java实现排列组合输出

完成了一种实现,发给你参考下。

不过感觉应该还有更好的办法,有时间我会继续研究下.

importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.HashSet;
importjava.util.List;
importjava.util.Set;
publicclassTestQiuhe{
//集合a{1,2,3,5,7,10},输出不多于4个元素(不重复)的加和为22的组合。
publicstaticvoidmain(String[]args){
int[]nums={1,2,3,5,7,10};
intl=nums.length;
List<int[]>results=newArrayList<int[]>();
for(inti1=0;i1<l;i1++){
for(inti2=0;i2<l;i2++){
if(nums[i1]==22){
results.add(newint[]{nums[i1]});
}
if(i2!=i1){
if(nums[i1]+nums[i2]==22){
results.add(newint[]{nums[i1],nums[i2]});
}
for(inti3=0;i3<l;i3++){
if(i3!=i1&&i3!=i2){
if(nums[i1]+nums[i2]+nums[i3]==22){
results.add(newint[]{nums[i1],nums[i2],nums[i3]});
}
for(inti4=0;i4<l;i4++){
if(i4!=i1&&i4!=i2&&i4!=i3){
if(nums[i1]+nums[i2]+nums[i3]+nums[i4]==22){
results.add(newint[]{nums[i1],nums[i2],nums[i3],nums[i4]});
}
}
}
}
}
}
}
}
//去重
Set<String>reSet=newHashSet<>();
for(int[]r:results){
Arrays.sort(r);
reSet.add(Arrays.toString(r));
}
System.out.println("一共得到结果集:"+reSet.size());
System.out.println(reSet);
}
}

运行结果:

一共得到结果集:2

[[5, 7, 10], [2, 3, 7, 10]]

㈢ Java程序如何实现对字符串的排列组合问题

import java.math.BigInteger;
import java.util.*;

public class PermutationGenerator {

private int[] a;
private BigInteger numLeft;
private BigInteger total;
public PermutationGenerator(int n) {
if (n < 1) {
throw new IllegalArgumentException("Min 1");
}
a = new int[n];
total = getFactorial(n);
reset();
}

public void reset() {
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
numLeft = new BigInteger(total.toString());
}

public BigInteger getNumLeft() {
return numLeft;
}

public BigInteger getTotal() {
return total;
}

public boolean hasMore() {
return numLeft.compareTo(BigInteger.ZERO) == 1;
}

private static BigInteger getFactorial(int n) {
BigInteger fact = BigInteger.ONE;
for (int i = n; i > 1; i--) {
fact = fact.multiply(new BigInteger(Integer.toString(i)));
}
return fact;
}

public int[] getNext() {

if (numLeft.equals(total)) {
numLeft = numLeft.subtract(BigInteger.ONE);
return a;
}

int temp;

// Find largest index j with a[j] < a[j+1]

int j = a.length - 2;
while (a[j] > a[j + 1]) {
j--;
}

// Find index k such that a[k] is smallest integer
// greater than a[j] to the right of a[j]

int k = a.length - 1;
while (a[j] > a[k]) {
k--;
}

// Interchange a[j] and a[k]

temp = a[k];
a[k] = a[j];
a[j] = temp;

// Put tail end of permutation after jth position in increasing order

int r = a.length - 1;
int s = j + 1;

while (r > s) {
temp = a[s];
a[s] = a[r];
a[r] = temp;
r--;
s++;
}

numLeft = numLeft.subtract(BigInteger.ONE);
return a;

}
//程序测试入口
public static void main(String[] args) {

int[] indices;
String[] elements = { "a", "b", "c"};
PermutationGenerator x = new PermutationGenerator(elements.length);
StringBuffer permutation;

while (x.hasMore())
{
permutation = new StringBuffer("%");
indices = x.getNext();
for (int i = 0; i < indices.length; i++) {
permutation.append(elements[indices[i]]).append("%");
}
System.out.println(permutation.toString());

}
}

}

先给你一个看看!

㈣ 求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算法实现方法

一 利用二进制状态法求排列组合 此种方法比较容易懂 但是运行喊隐颂效率不高 小数据排列组合可以使用

复制代码 代码如下: import java util Arrays;

//利用二进制算法进行全排列 //count : //count :

public class test { public static void main(String[] args) { long start=System currentTimeMillis(); count (); long end=System currentTimeMillis(); System out println(end start); } private static void count (){ int[] num=new int []{ }; for(int i= ;i<Math pow( );i++){ String str=Integer toString(i ); int sz=str length(); for(int j= ;j< sz;j++){ str=" "+str; } char[] temp=str toCharArray(); Arrays sort(temp); String gl=new String(temp); if(!gl equals(" ")){ continue; } String result=""; for(int m= ;m<str length();m++){ result+=num[Integer parseInt(str charAt(m)+"")]; } System out println(result); } } public static void count (){ int[] num=new int []{ }; int[] ss=new int []{ }; int[] temp=new int[ ]; while(temp[ ]< ){ temp[temp length ]++; for(int i=temp length ;i> ;i ){ if(temp[i]== ){ temp[i]= ; temp[i ]++; } } int []tt=temp clone(); Arrays sort(tt); if(!Arrays equals(tt ss)){ continue; } String result=""; for(int i= ;i<num length;i++){ result+=num[temp[i]]; } System out println(result); } } }

二 用递归的思想携慧来求排列跟组合 代码量比较大

复制代码 代码如下郑郑: package practice;

import java util ArrayList; import java util List;

public class Test {

/** * @param args */ public static void main(String[] args) { // TODO Auto generated method stub Object[] tmp={ }; // ArrayList<Object[]> rs=RandomC(tmp); ArrayList<Object[]> rs=cmn(tmp ); for(int i= ;i<rs size();i++) { // System out print(i+"="); for(int j= ;j<rs get(i) length;j++) { System out print(rs get(i)[j]+" "); } System out println(); } }

// 求一个数组的任意组合 static ArrayList<Object[]> RandomC(Object[] source) { ArrayList<Object[]> result=new ArrayList<Object[]>(); if(source length== ) { result add(source); } else { Object[] psource=new Object[source length ]; for(int i= ;i<psource length;i++) { psource[i]=source[i]; } result=RandomC(psource); int len=result size();//fn组合的长度 result add((new Object[]{source[source length ]})); for(int i= ;i<len;i++) { Object[] tmp=new Object[result get(i) length+ ]; for(int j= ;j<tmp length ;j++) { tmp[j]=result get(i)[j]; } tmp[tmp length ]=source[source length ]; result add(tmp); } } return result; } static ArrayList<Object[]> cmn(Object[] source int n) { ArrayList<Object[]> result=new ArrayList<Object[]>(); if(n== ) { for(int i= ;i<source length;i++) { result add(new Object[]{source[i]}); } } else if(source length==n) { result add(source); } else { Object[] psource=new Object[source length ]; for(int i= ;i<psource length;i++) { psource[i]=source[i]; } result=cmn(psource n); ArrayList<Object[]> tmp=cmn(psource n ); for(int i= ;i<tmp size();i++) { Object[] rs=new Object[n]; for(int j= ;j<n ;j++) { rs[j]=tmp get(i)[j]; } rs[n ]=source[source length ]; result add(rs); } } return result; }

}

三 利用动态规划的思想求排列和组合

复制代码 代码如下: package Acm; //强大的求组合数 public class MainApp { public static void main(String[] args) { int[] num=new int[]{ }; String str=""; //求 个数的组合个数 // count( str num ); // 求 n个数的组合个数 count ( str num); }

private static void count (int i String str int[] num) { if(i==num length){ System out println(str); return; } count (i+ str num); count (i+ str+num[i]+" " num); }

private static void count(int i String str int[] num int n) { if(n== ){ System out println(str); return; } if(i==num length){ return; } count(i+ str+num[i]+" " num n ); count(i+ str num n); } }

下面是求排列

复制代码 代码如下: lishixin/Article/program/Java/JSP/201311/20148

㈥ 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个

热点内容
苹果6密码忘记怎么办啊 发布:2025-01-24 22:38:46 浏览:832
微博android 发布:2025-01-24 22:38:40 浏览:531
安卓自带的剪辑软件哪个好用 发布:2025-01-24 22:15:22 浏览:391
centosyumphpfpm 发布:2025-01-24 22:14:19 浏览:154
反编译看不懂代码 发布:2025-01-24 22:04:52 浏览:139
zip4j加密 发布:2025-01-24 21:57:57 浏览:455
安卓录屏功能在哪里找到 发布:2025-01-24 21:55:24 浏览:651
ip参数用哪个服务器设置 发布:2025-01-24 21:46:27 浏览:924
快捷方式缓存 发布:2025-01-24 21:28:35 浏览:826
22款途观l买哪个配置最合适 发布:2025-01-24 21:28:33 浏览:235