• 把数组排成最小的数


    题目

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

    分析

      将数字转换为字符串形式,然后对字符串数组进行字符串的排序(本题中用的是快排),最后按照顺序连接起来即为输出。

      注意,在比较两个字符串时,前提是两个字符串的长度相等,所以在比较str1和str2时,我们比较的是str1+str2和str2+str1。

    代码

     1     public boolean compare(String str1, String str2){
     2         String s1 = str1+str2, s2 = str2+str1;
     3         if(s1.compareTo(s2)>0){
     4             return true;
     5         }
     6         else{
     7             return false;
     8         }
     9     }
    10     
    11     public void sort(String[] s, int low, int high){
    12         if(low>high)
    13             return;
    14         int i = low, j = high;
    15         String index = s[low];
    16         while(i<j){
    17             while(i<j && compare(s[j], index))
    18                 j--;
    19             if(i<j)
    20                 s[i++] = s[j];
    21             while(i<j && compare(index, s[i]))
    22                 i++;
    23             if(i<j)
    24                 s[j--] = s[i];
    25         }
    26         s[i] = index;
    27         sort(s, low, i-1);
    28         sort(s, i+1, high);
    29     }
    30     
    31     public String PrintMinNumber(int[] numbers){
    32         String[] s = new String[numbers.length];
    33         for(int i=0;i<numbers.length;i++){
    34             s[i] = numbers[i]+"";
    35         }
    36         sort(s, 0, s.length-1);
    37         String res = "";
    38         for(int i=0;i<s.length;i++){
    39             res += s[i];
    40         }
    41         return res;
    42     }
  • 相关阅读:
    Java多线程之 对同一个值操作
    Java 之 应用多线程计算1+2+...+100之多种方法比较(二)
    Java 之 应用多线程计算1+2+...+100之多种方法比较(一)
    SQL语句优化
    第六章:shiro Realm相关对象
    第五章:shiro密码加密
    第四章:shiro的INI配置
    第三章:shiro授权认证
    第二章:shiro身份验证
    第一章:Shiro简介
  • 原文地址:https://www.cnblogs.com/jiqianqian/p/6957891.html
Copyright © 2020-2023  润新知