题目描述

每个数字的十进制表示中(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);
        }      
    }