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