定义为:每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。
满足条件的数字可能很多,找到其中的最小值即可。
多多君还有很多研究课题,于是多多君找到了你--未来的计算机科学家寻求帮助。
数据范围:
进阶:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度
共一行,一个正整数N,如题意所示,表示组合中数字不同数位之和。
(1 <= N <= 1,000)
共一行,一个整数,表示该组合中的最小值。
如果组合中没有任何符合条件的数字,那么输出-1即可。
5
5
符合条件的数字有:5,14,23,32,41其中最小值为5
12
39
50
-1
没有符合条件的数字 (T▽T)
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N=in.nextInt(); if(N<10){ System.out.println(N); } else if(N>45){ System.out.println(-1); } else{ int ans=0; int digit=0; for(int i=9;i>0;i--){ if(i<=N){ N-=i; ans+=(int)Math.pow(10,digit)*i; digit++; } else{ ans+=(int)Math.pow(10,digit)*N; break; } } System.out.println(ans); } } }
import java.util.Scanner; import java.lang.String; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); System.out.println(getToSumMinNumber(N)); } public static int getToSumMinNumber(int input) { int sum = 0; if(input >= 0 && input < 1000) { String temp = String.valueOf(input); if(temp.length() == 1) { return input; }else if(input > 45) { return -1; }else { StringBuffer sb = new StringBuffer(); getNum(input,9,sb); return Integer.valueOf(sb.toString()); } } return -1; } public static void getNum(int input,int max,StringBuffer sb) { String temp = String.valueOf(input); if(temp.length() == 1 && input <= max) { sb.append(temp); }else { getNum(input-max,max-1,sb); sb.append(max); } } }