java实现排列组合输出

Python025

java实现排列组合输出,第1张

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

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

import java.util.ArrayList

import java.util.Arrays

import java.util.HashSet

import java.util.List

import java.util.Set

public class TestQiuhe {

    //集合a{1,2,3,5,7,10},输出不多于4个元素(不重复)的加和为22的组合

    public static void main(String[] args) {

        int[] nums={1,2,3,5,7,10}

        int l = nums.length

        List<int[]> results=new ArrayList<int[]>()

        for(int i1=0i1<li1++){

            for(int i2=0i2<li2++){

                if(nums[i1]==22){

                    results.add(new int[]{nums[i1]})

                }

                if(i2!=i1){

                    if(nums[i1]+nums[i2]==22){

                        results.add(new int[]{nums[i1],nums[i2]})

                    }

                    for(int i3=0i3<li3++){

                        if(i3!=i1 && i3!=i2){

                            if(nums[i1]+nums[i2]+nums[i3]==22){

                                results.add(new int[]{nums[i1],nums[i2],nums[i3]})

                            }

                            for(int i4=0i4<li4++){

                                if(i4!=i1 && i4!= i2 && i4!=i3){

                                    if(nums[i1]+nums[i2]+nums[i3]+nums[i4]==22){

                                        results.add(new int[]{nums[i1],nums[i2],nums[i3],nums[i4]})

                                    }

                                }

                            }

                        }

                    }

                }

            }

        }

        //去重

        Set<String> reSet=new HashSet<>()

        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]]

细节上需要改进。import java.util.*

public class Map {

Vector<int[]>v = new Vector<int[]>()

Vector<Integer>vv = new Vector<Integer>()Map() {

int[] array = { 1, 2, 3, 4, 5 }

Scanner s = new Scanner(System.in)

int x = s.nextInt()

pro(array, 0, x)

for(int i=0i<v.size()i++){

int[] r=v.get(i)

for(int j=0j<r.lengthj++){

System.out.print(""+r[j]+",")

}

System.out.println()

}

} public void pro(int[] a, int start, int n) {

if (n == 0) {

int[] r = new int[vv.size()]

for (int i = 0i <r.lengthi++) {

r[i] = vv.get(i)

}

v.add(r)

return

}

if (start >= a.length) {

return

}

for (int i = starti <a.lengthi++) {

vv.add(a[i])

pro(a, i + 1, n - 1)

vv.remove(vv.size()-1)

}

} public static void main(String arg[]) {

new Map()

}

}

import java.util.ArrayList

import java.util.Collections

import java.util.Randompublic class RandomTest {

public static void main(String[] args) {

Random random = new Random()

int i = random.nextInt(5) + 1

ArrayList<Integer>list = addNum(i)

Collections.sort(list)

for(Object j:list){

System.out.println(j)}

} public static ArrayList<Integer>addNum(int num) {

ArrayList<Integer>randomnum = new ArrayList<Integer>()

Random random = new Random()

randomnum.add( random.nextInt(5) + 1)

for (int i = 1i <numi++) {

Integer ii = random.nextInt(5) + 1

Boolean b = true

for (int j = 0j <ij++) {

if (randomnum.get(j).equals(ii))

b = false

}

if (b) {randomnum.add(ii)<br> }

else if(!b){

i--

}

}

return randomnum

}}