演.说.家 2021-11-25 11:30 采纳率: 100%
浏览 46
已结题

Java题不知道怎么去掉数字重复出现的情况

img

  • 写回答

4条回答 默认 最新

  • 小 鱼 儿 呀 2021-11-25 17:20
    关注

    小兄弟,问题给你解决了,时空性都考虑到了,九层循环太浮夸,这个还有优化空间

    img

    import java.util.*;
    import org.apache.commons.collections.map.LinkedMap;
    import org.apache.commons.lang3.StringUtils;
        public static void main(String[] args) {
            //1 求出 ** X * = ***
            List<Integer>  numArr = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
            //2 从1中筛选     ** X * = ***   =   ** X * 且(*处于0-9)
            findShouer(numArr);
        }
        private static void findShouer(List<Integer> numArr) {
           Map<Integer, String> maps = new LinkedMap();
            int[] flagArr = getInts();
            for(int key1=0;key1<numArr.size();key1++){
                //选取 ** X *里的第一个因数十位*,并给对应标志数组打已用标志
                flagArr[key1]=1;
                for(int key2:getLiftChoice(flagArr)){
                    //选取 ** X *里的第一个因数个位*,并给对应标志数组打已用标志
                    flagArr[key2]=1;
                    for(int key3:getLiftChoice(flagArr)){
                        //选取 ** X *里的第二个因数*,并给对应标志数组打已用标志
                        flagArr[key3] = 1;
                        //选取符合***不与因数重合条件的所有积
                        Set<Integer> listResult = getListResult(getLiftChoice(flagArr));
                        int temp = (numArr.indexOf(key1) * 10 + numArr.indexOf(key2)) * numArr.indexOf(key3);
                        if(listResult.contains(temp)){
                            if(maps.containsKey(temp)){
                                if(!StringUtils.containsAny(maps.get(temp)+""+temp,key1+"",key2+"",key3+""))
                                System.out.println(maps.get(temp)+"="+key1+""+key2+"*"+key3);
                            }else{
                                maps.put(temp,key1+""+key2+"*"+key3+"="+temp);
                            }
                        }
                        flagArr[key3] = 0;
                    }
                    flagArr[key2] = 0;
                }
                flagArr[key1] = 0;
            }
        }
    
        private static Set<Integer> getListResult(List<Integer> liftChoice) {
            Set<Integer> resultList=new LinkedHashSet<>();
            for(int i=0;i<liftChoice.size();i++){
                int bai=liftChoice.get(i)*100;
                for(int j=0;j<liftChoice.size();j++) {
                    int shi = liftChoice.get(j) * 10;
                    for (int k = 0; k < liftChoice.size(); k++) {
                        int ge = liftChoice.get(k);
                        if(i!=j&&i!=k&&j!=k)
                        resultList.add(bai+shi+ge);
                    }
                }
            }
            return resultList;
        }
    
        private static int[] getInts() {
            int[]  flagArr={0,0,0,0,0,0,0,0,0,0};
            return flagArr;
        }
        private static List<Integer>  getLiftChoice(int[] flagArr) {
            List<Integer>  numChoice =new ArrayList<>();
            for(int i=0;i<flagArr.length;i++){
                if(1!=flagArr[i]){
                    numChoice.add(i);
                }
            }
            return numChoice;
        }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月4日
  • 已采纳回答 11月26日
  • 创建了问题 11月25日

悬赏问题

  • ¥60 Matlab联合CRUISE仿真编译dll文件报错
  • ¥15 脱敏项目合作,ner需求合作
  • ¥15 脱敏项目合作,ner需求合作
  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId