• 真的就有人可以用两三行代码实现你写了几十行代码的功能.....


    问题描述:
    输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

    1
    /* 2 *比较两个数字拼接字符串时,谁排在前的call back 函数 3 * 4 *比较条件为将两个整数转换成字符串后,从最高位开始比,如果小的排在前面 5 *如果比较到末尾结束两个字符串都相同,则将短的那个字符串的第一个字符和长的字符串剩下的字符比较,比较结果小的排在前面 6 * 7 */ 8 public Comparator<Integer>NumberCompare() 9 { 10 return new Comparator<Integer>() { 11 @Override 12 public int compare(Integer number1, Integer number2) { 13 // TODO Auto-generated method stub 14 /* 15 char str1[] = number1.toString().toCharArray(); 16 char str2[] = number2.toString().toCharArray(); 17 18 int len = str1.length > str2.length ? str2.length : str1.length; //获得长度小的,作为循环判断终止条件 19 20 int index; 21 for(index = 0; index < len; index++) 22 { 23 if(str1[index] > str2[index]) 24 { 25 return 1; 26 } 27 else if(str1[index] < str2[index]) 28 { 29 return -1; 30 } 31 } 32 33 34 if(len == str1.length) 35 { 36 for(int i = index; i < str2.length; i++) 37 { 38 if(str1[0] < str2[i]) 39 { 40 return -1; 41 } 42 else if(str1[0] > str2[i]) 43 { 44 return 1; 45 } 46 } 47 } 48 else 49 { 50 for(int i = index; i < str1.length; i++) 51 { 52 if(str1[i] < str2[0]) 53 { 54 return -1; 55 } 56 else if(str1[i] > str2[0]) 57 { 58 return 1; 59 } 60 } 61 } 62 //System.out.println(number1 + " ==== " + number2); 63 return 0; 64 */ 65 66 /* 67 * 代码优化 68 * 巧妙的比较方式 69 */ 70 String str1 = number1.toString(); 71 String str2 = number2.toString(); 72 73 str1 = str1 + str2; 74 str2 = str2 + str1; 75 76 77 return str1.compareTo(str2); 78 79 80 } 81 }; 82 } 83 84 85 public String PrintMinNumber(int [] numbers) 86 { 87 String string = new String(); 88 89 if(numbers == null || numbers.length == 0) 90 { 91 return string; 92 } 93 94 Comparator<Integer> comparator = NumberCompare(); 95 Integer IntNumbers[] = new Integer[numbers.length]; 96 97 for(int i = 0; i < numbers.length; i++) 98 { 99 IntNumbers[i] = numbers[i]; 100 } 101 102 Arrays.sort(IntNumbers, comparator); 103 104 105 106 for(int i = 0; i < IntNumbers.length; i++) 107 { 108 string += IntNumbers[i].toString(); 109 } 110 111 return string; 112 }
  • 相关阅读:
    HDU 1003——Max Sum(动态规划)
    HDU 2602 ——背包问题
    HDU 1850——Being a good boy
    HDU——2588 数论应用
    HDU1222——数论
    HDU1465——不容易系列之一(错排)
    URAL 2038 Minimum Vertex Cover
    772002画马尾
    CodeForces 19D Points
    The 2015 China Collegiate Programming Contest Game Rooms
  • 原文地址:https://www.cnblogs.com/daimadebanyungong/p/4978794.html
Copyright © 2020-2023  润新知