美文网首页剑指offer的java实现-数据结构与算法
剑指offer第二版-45.把数组排列成最小的数

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

作者: ryderchan | 来源:发表于2017-09-02 18:52 被阅读78次

    本系列导航:剑指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 
    

    相关文章

      网友评论

        本文标题:剑指offer第二版-45.把数组排列成最小的数

        本文链接:https://www.haomeiwen.com/subject/xgohjxtx.html