分析:写几个就会发现,最优的做法应该是先写1234567890,然后如果不够用,往后面依次加1、2、3……然后就可以过了,这样保证每个数字尽可能多得被用到,题解是另一种构造,原理一样,严格证明看题解。。
题解:
1 import java.io.*; 2 import java.util.*; 3 import java.math.BigInteger; 4 public class Main { 5 public static void main(String[] args){ 6 Scanner cin=new Scanner(System.in); 7 String s; 8 s=cin.next(); 9 BigInteger n=new BigInteger(s); 10 int len=n.toString().length(); 11 BigInteger ans=new BigInteger("0"); 12 ans=BigInteger.valueOf(10*(len-1)); 13 for(int i=1;i<10;i++){ 14 if(i<s.charAt(0)-'0') 15 ans=ans.add(BigInteger.ONE); 16 if(i==s.charAt(0)-'0'){ 17 for(int j=0;j<len;j++){ 18 if(s.charAt(j)-'0'>i||(j==len-1&&s.charAt(j)-'0'==i)){ 19 ans=ans.add(BigInteger.ONE);break; 20 } 21 if(s.charAt(j)-'0'<i){ 22 break; 23 } 24 } 25 break; 26 } 27 } 28 System.out.println(ans); 29 cin.close(); 30 } 31 }