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 }
  • 相关阅读:
    扫描线算法模板
    spark submit 常用设置
    networkx 画有向图 使用DiGraph
    超实用的Spark数据倾斜解决
    解决spark中遇到的数据倾斜问题
    TrickBot 恶意木马软件
    windows 打开snappy文件 安装python snappy——还是直接用pip install xx.whl 打包好的安装吧
    解决CentOS删除文件后没有释放磁盘空间(lsof命令)
    Linux 系统下 centOS 7 ipconfig 提示没有安装
    tomcat启动报错org.apache.catalina.LifecycleException: The configured protocol [org.apache.coyote.http...
  • 原文地址:https://www.cnblogs.com/noaman/p/5640102.html
Copyright © 2011-2022 走看看