剑指offer第二版-45.把数组排列成最小的数

本系列导航:剑指offer(第二版)java实现导航帖

面试题45:把数组排列成最小的数

题目要求:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,使其为所有可能的拼接结果中最小的一个。例如输入{3,32,321},则输入321323。

解题思路:
此题需要对数组进行排序,关键点在于排序的规则需要重新定义。我们重新定义“大于”,“小于”,“等于”。如果a,b组成的数字ab的值大于ba,则称a"大于"b,小于与等于类似。比如3与32,因为332大于323,因此我们称3“大于”32。我们按照上述的“大于”,“小于”规则进行升序排列,即可得到题目要求的答案。

package chapter5;

import java.util.Arrays;
import java.util.Comparator;

/**
 * Created with IntelliJ IDEA
 * Author: ryder
 * Date  : 2017/8/3
 * Time  : 10:13
 * Description:把数组排成最小的数
 **/
public class P227_SortArrayForMinNumber {
    public static void printMinNumber(int[] data){
        if(data==null||data.length==0)
            return;
        for(int i=0;i<data.length-1;i++){
            for(int j=0;j<data.length-1-i;j++){
                if(bigger(data[j],data[j+1])){
                    int temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;
                }
            }
        }
        for(int item:data){
            System.out.print(item);
            System.out.print(" ");
        }
        System.out.println();
    }
    //if a>=b return true
    public static boolean bigger(int a,int b){
        String temp1 = a+""+b;
        String temp2 = b+""+a;
        if(temp1.compareTo(temp2)>0)
            return true;
        else
            return false;
    }
    public static void main(String[] args){
        printMinNumber(new int[]{3,32,321});
    }
}

运行结果

321 32 3 

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    千机楼阅读 982评论 0 4
  • 剑指 offer 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成...
    faremax阅读 1,145评论 0 7
  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    冷锋_007阅读 927评论 0 6
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 679评论 1 1
  • 跟大叔结婚一年了吧?认识?一年半了吧?现在呢?看不到希望,想离婚。离婚以后怎么办?不知道。真的不知道。你是在...
    叶琳娜阅读 81评论 0 0