java穷举0-9之间所有不重复的值

😂 这篇文章最后更新于1911天前,您需要注意相关的内容是否还可用。
/*五、分析以下需求,并用代码实现:
        (1)打印由7,8,9三个数组成的三位数,要求该三位数中任意两位数字不能相同;
        (2)打印格式最后的三位数字以空格分隔,如789 798 879 897 978 987。
        注:要求使用StringBuilder来完成*/
public class HomeWork05 {
    public static void main(String[] args) throws IOException {
//        输入值并简单处理
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入起始值(0~9):");
        int start=sc.nextInt();
        System.out.println("请输入结束值(0~9):");
        int end=sc.nextInt();
        int bound=end-start+1;
        StringBuilder stringBuilder = new StringBuilder();
        HashSet<String> set = new HashSet<>();
        int cout=0;
        Random r = new Random();
        long bCount=boundCount(bound);
        if (bCount>10000){
            System.out.println("结果数超过10000为"+bCount+"计算会很慢,请按任意键继续");
            System.in.read();
        }
//        穷举各种可能,小于正确结果个数持续执行 直到达到正确个数
        while (set.size()<bCount) {
            int number = r.nextInt(bound) + start;
            if (!stringBuilder.toString().contains(String.valueOf(number))&&stringBuilder.toString().length()<bound){
                stringBuilder.append(number);
            }else if (stringBuilder.toString().length()==bound){
                set.add(stringBuilder.toString());
                stringBuilder=new StringBuilder();
            }
        }
        List ts = new ArrayList<>(set);
        Collections.sort(ts); //排序
        System.out.println("结果数:"+ts.size());
        System.out.println(ts.toString().replace("[","")
                .replace("]","")
                .replace(","," "));
    }

    /**
     * 计算笛卡尔积运算去重后个数
     * @param bound
     * @return
     */
    public static long boundCount(int bound){
        int sum=1;
        for (int i = 1; i <= bound; i++) {
           sum*=i;
        }
        return sum;
    }
}