剑指offer_数组---把数组排成最小的数

简介: 剑指offer_数组---把数组排成最小的数

##题目描述

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

##解题思路

1,把数字转换为字符串

2,定义新的字符串比较规则

##代码实现

/**
 * 
 */
package 数组;
import java.util.Arrays;
import java.util.Comparator;
/**
 * <p>Title:PrintMinNumber </p>
 * <p>Description: </p>
 * @author 田茂林
 * @data 2017年8月27日 上午11:38:12
 */
public class PrintMinNumber {
  public static String printMinNumber(int [] numbers) {
    if(numbers==null||numbers.length<1){
      return null;
    }
    String[] strs = new String[numbers.length];
    for (int i = 0; i < numbers.length; i++) {
      strs[i] = String.valueOf(numbers[i]);
      //System.out.println(strs[i]);
    }
    //定义新的排序规则
    Arrays.sort(strs, new Comparator<String>() {
      @Override
      public int compare(String o1, String o2) {
        String s1 = o1+o2;
        String s2 = o2+o1;
        return s1.compareTo(s2);
      }
    });
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < strs.length; i++) {
      sb.append(strs[i]);
    }
    return sb.toString();
    }
  public static void main(String[] args) {
        int[] array = {3,32,321};
        System.out.println(printMinNumber(array));
  }
}


相关文章
【剑指offer】-把数组排成最小的数-33/67
【剑指offer】-把数组排成最小的数-33/67
【剑指offer】-最小K个数-28/67
【剑指offer】-最小K个数-28/67
|
12月前
【LeetCode】1171. 从链表中删去总和值为零的连续节点、面试题 02.05. 链表求和
目录 1171. 从链表中删去总和值为零的连续节点 面试题 02.05. 链表求和
46 0
|
5月前
|
Java
每日一题《剑指offer》数组篇之把数组排成最小的数
每日一题《剑指offer》数组篇之把数组排成最小的数
39 0
每日一题《剑指offer》数组篇之把数组排成最小的数
|
5月前
|
Java
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
57 0
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
|
5月前
牛客网-最小的k个数
牛客网-最小的k个数
28 0
|
12月前
|
算法 C++
剑指offer(C++)-JZ40:最小的K个数(算法-排序)
剑指offer(C++)-JZ40:最小的K个数(算法-排序)
剑指offer_数组---最小的K个数
剑指offer_数组---最小的K个数
44 0
剑指offer 46. 把数组排成最小的数
剑指offer 46. 把数组排成最小的数
67 0
剑指offer 41. 最小的k个数
剑指offer 41. 最小的k个数
66 0