栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记一次“PDD笔试题”练习--每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。满足条件的数字可能很多,找到其中的最小值即可。

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记一次“PDD笔试题”练习--每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。满足条件的数字可能很多,找到其中的最小值即可。

题目: 每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。满足条件的数字可能很多,找到其中的最小值即可。

N的取值范围: 1<=N<=1000

空间复杂度: 空间复杂度 O(1)                          ​​​​​​​        ​​​​​​​        时间复杂度:时间复杂度 O(n)

思考......

编程......

测试......

修改......

终于......

本人的错误思路:

@org.junit.Test
public void testOne(){
    Scanner sc = new Scanner(System.in);
    boolean flag = false;
    while_flag:while(!flag){
        System.out.println("请输入一个证书n,并要求1<=n<=1000:");
        Integer n = sc.nextInt();
        //判断数字是否满足条件
        if( n>=1 && n<=1000){
            //输入的数满足条件继续向下执行
            flag = true;
            //创建set集合  存放所有满足条件的数
            HashSet set = new HashSet();
            //理解成结果集是两位数了  ......
            for(int i=0; i<=9 i++){
                for(int j=0; j<=9 j++){    //两层循环进行组合  跳出满足条件的数
                    String num = i+""+j;
                    Integer integer = Integer.valueOf(num);
                    if(i+j = n){
                        set.add(integer);
                    }
                } 
            }   
            //判断是否有满足条件的结果集,set集合的size()大于0表示有满足条件的结果,否则输出-1             
            if(set.size()>0){
                Integer min = Collections.min(set);   //获取集合中的最小值
                System.out.println(min);
            }else{
                System.out.println(-1);
            }            
        }else{
            //不满足条件,程序从头执行
            flag = false;
            System.out.println("输入的数字不满足条件!");
            continue while_flag;
        }

    }

}

查阅资料后发现,自己好垃圾,思路就错了。PDD-数字组合编程题

正解:

@org.junit.Test
public void testTwo(){
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个整数N,并且要求1<=N<=1000:");
    int N = sc.nextInt();
    //0~9 组成的各位不重复的多位数中,各位数字之和最大为:1+2+3+4+5+6+7+8+9=45,
    //故N的超过45,应返回-1
    if(N>45){
        System.out.println(-1);
        return; //程序结束
    }
    //N<10时   其本身就是众多结果集中最小的值,故返回本身
    if(N<10){
        System.out.println(N);
        return; //程序结束
    }
    //对于其它数 做以下处理
    int nums = 0; //结果数字
    int digit = 0; //用来处理各位数的值   配合Math.pow(x,y)使用
    //从9到0倒叙循环,数越大的越靠近数字的左侧,才能保证数字最小
    for(int i = 9; i > 0; i--){
        if(i<=N){
            N -= i;      //N-i,直到N=0为止
            nums += (int)Math.pow(10,digit)*i;
            digit++;
        }
    }
    System.out.println(nums);
}

受打击急了,上班摸会鱼不好么,看啥算法题,看完自信心受打击了.......有机会多练练吧还是!!!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/712702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号