题解 | #多多的数字组合#

多多的数字组合

http://www.nowcoder.com/questionTerminal/3d6b53e097ea41bda049d111f30db28e

题目描述

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

题目分析

输入数字N,返回的数字满足:各个数位的数字之和等于N,找出最小数字。
由于数字由0~9组成,且各个数位不相同,因此数字最短为1位,最长为10位,各个数位之和的范围为 0-45 ,即0-1023456789
对于输入值,首先判断范围,小于0或大于45则不存在,返回-1
在0到45之间,若使值最小,则较大数字放在右侧,较小数字放在左侧。从9开始一次递减判断,对于小于N的数字i,将N自减i,同时把i加到结果中,直至N为0。

public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int input = sc.nextInt();
        if(input < 0 || input > 45){
            System.out.println(-1);
        }else{
            int ans = 0; //输出的结果
            int digit = 0;  //数位
            for(int i = 9;i >= 0;i--){
                if(input >= i){
                    ans = (int)Math.pow(10,digit) * i + ans;
                    input -= i;
                    digit++;
                }
            }
            System.out.println(ans);
        }      
    }
全部评论

相关推荐

小叮当411:应该是1-3个月吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 10:39
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务