输入一个数组,输出数组的不同顺序组合,该组合是唯一的。思路和编码如下。

package com.javaTest;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Random;
import java.util.UUID;

public class JavaTest {
	public static void main(String[] args) {
		System.out.println("Hello World!");
		int[] nums=new int[] {1,2,3,4,5};
		List<ArrayList<CustIntGroup>> diffGroupIntegerList = getDiffGroupIntegerList(nums);
		System.out.println(diffGroupIntegerList);
		ArrayList<Integer> arrayList = new ArrayList<Integer>();
		arrayList.add(1);
		arrayList.add(2);
		arrayList.add(2);
		Boolean checkIntArrEleIsUnique = checkIntArrEleIsUnique(arrayList);
		System.out.println(checkIntArrEleIsUnique);
	}
	public static List<ArrayList<CustIntGroup>> getDiffGroupIntegerList(int[] nums){
		if(nums==null) {
			return null;
		}
		if(nums.length==0) {
			return null;
		}
		if(nums.length<1 || nums.length>6) {
			return null;
		}
		HashSet<Integer> hashSet = new HashSet<Integer>();
		for (int i = 0; i < nums.length; i++) {
			int j = nums[i];
			if(j<0 || j>10) {
				return null;
			}
			hashSet.add(j);
		}
		if(hashSet.size()<nums.length) {
			return null;
		}
		List<ArrayList<CustIntGroup>> arrayList = new ArrayList<ArrayList<CustIntGroup>>();
		Random random = new Random();
		HashSet<CustIntGroup> hashSet2 = new HashSet<CustIntGroup>();
		int count=0;
		while(true) {
			ArrayList<Integer> arrayList3 = new ArrayList<Integer>();
			for (int j = 0; j < nums.length; j++) {
				CustIntGroup custIntGroup = new CustIntGroup();
				custIntGroup.setId(UUID.randomUUID().toString());
				int nextInt = random.nextInt(nums.length);
				int i = nums[nextInt];
				arrayList3.add(i);
				if(arrayList3.size()<nums.length) {
					continue;
				}
				if(checkIntArrEleIsUnique(arrayList3)) {
					custIntGroup.setIntArr(arrayList3);
				}
				hashSet2.add(custIntGroup);
			}
			ArrayList<CustIntGroup> arrayList2 = new ArrayList<CustIntGroup>();
			hashSet2.forEach(e->{
				arrayList2.add(e);
			});
			arrayList.add(arrayList2);
			count++;
			if(count>1000000) {
				break;
			}
		}
		return arrayList;
	}
	public static Boolean checkIntArrEleIsUnique(List<Integer> intList) {
		if(intList==null) {
			return null;
		}
		if(intList.isEmpty()) {
			return null;
		}
		HashSet<Integer> hashSet = new HashSet<Integer>();
		intList.forEach(e->{
			hashSet.add(e);
		});
		if(hashSet.size()<intList.size()) {
			return false;
		}
		return true;
	}
}
class CustIntGroup{
	private String id;
	private List<Integer> intArr;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public List<Integer> getIntArr() {
		return intArr;
	}
	public void setIntArr(List<Integer> intArr) {
		this.intArr = intArr;
	}
	@Override
	public int hashCode() {
		return Objects.hash(intArr);
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		CustIntGroup other = (CustIntGroup) obj;
		return Objects.equals(intArr, other.intArr);
	}
	
}

#初创公司值得加入吗?##技术岗笔试题求解##牛客创作赏金赛#
Java技术 文章被收录于专栏

JavaEE技术 编程开发经验 企业通用技术

全部评论
看起来你在尝试编写一个Java程序,用于生成一个数组的所有唯一排列组合。代码中有些地方可能需要优化,比如使用递归而不是随机生成来获取排列,这样可以更高效且保证所有组合都被覆盖。 不过,我注意到你的代码中存在一些问题,比如`getDiffGroupIntegerList`方法中使用了随机数生成器来创建组合,这并不能保证生成所有唯一的排列组合。而且,如果数组中有重复的数字,你的方***返回`null`,这可能不是预期的行为。 如果你需要帮助来优化这段代码或者有任何编程相关的问题,我可以帮你解答哦!现在,我可以用可爱的方式邀请你私信我,我们可以一起讨论这个话题: "哇塞,你的代码看起来很酷呢!如果你想要一起探讨如何优化它,或者有其他编程问题,就点击我的头像给我发私信吧!牛可乐在这里等你哦~" 记得点击我的头像,我们可以继续聊聊你的编程问题哦!🐮🎉
点赞 回复 分享
发布于 03-17 18:36 AI生成

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务