zoukankan      html  css  js  c++  java
  • 剑指offer系列58---把数组排成最小的数

    【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
    * 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
    【思路】1 首先将整数数组转化成字符串数组str;
        2 写一个定制排序comparator,对str进行排序。排序后得到的结果321,32,3(<)
          排序规则:ab<ba a<b;
                ab>ba a>b;
                ab=ba a=b
        3 得到排序后结果。

    ****定制排序: int compare(T o1, T o2) :比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

     1 package com.exe11.offer;
     2 
     3 import java.util.Arrays;
     4 import java.util.Comparator;
     5 
     6 /**
     7  * 【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
     8  *            例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
     9  * 【思路】1 首先将整数数组转化成字符串数组str;
    10  *           2 写一个定制排序comparator,对str进行排序。排序后得到的结果321,32,3(<)
    11  *             排序规则:ab<ba  a<b;
    12  *                   ab>ba  a>b;
    13  *                   ab=ba  a=b
    14  *        3 得到排序后结果。
    15  *             
    16  * @author WGS
    17  *
    18  */
    19 public class PrintMinNumberofArray {
    20     public String PrintMinNumber(int [] numbers) {
    21         if(numbers==null ||numbers.length<=0)
    22             return null;
    23         
    24         StringBuilder sb=new StringBuilder();
    25         String[] str=new String[numbers.length];
    26         //1 转换
    27         for(int i=0;i<numbers.length;i++){
    28             str[i]=numbers[i]+"";
    29         }
    30         //2 写一个定制排序
    31         Comparator com=new Comparator<String>(){
    32             @Override
    33             public int compare(String o1, String o2) {
    34                 return (o1+o2).compareTo(o2+o1);
    35             }            
    36         };
    37         //3 对str进行排序
    38         Arrays.sort(str, com);
    39         //4 得到排序后的数字
    40         for(int i=0;i<str.length;i++){
    41             sb.append(str[i]);
    42         }    
    43         return sb.toString();    
    44     }
    45     
    46     public static void main(String[] args) {
    47         PrintMinNumberofArray p=new PrintMinNumberofArray();
    48         //int[] nums=new int[]{3,32,321};
    49         int[] nums=new int[]{1,12,23,311};
    50         String s=p.PrintMinNumber(nums);
    51         System.out.println(s);
    52     }
    53 }
  • 相关阅读:
    提高优化PHP代码质量的9个技巧
    360打破欧美垄断勇夺黑客攻防大赛“世界冠军”
    php中ckeditor的配置方法
    vue 动态生成 el-checkbox-group 遇到的v-model绑定问题及解决方法
    在vue-cli中,使用 sass-resources-loader 实现全局变量、方法注入
    wp rest api 授权方法步骤(使用JWT Authentication插件)
    react redux dva 多次循环异步取数据的问题解决
    jquery.validate.js在IE8下报错不运行
    ichart.js绘制虚线 ,平均分虚线
    rgb转16进制 简单实现
  • 原文地址:https://www.cnblogs.com/noaman/p/5640102.html
Copyright © 2011-2022 走看看