劍指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類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 劍指 offer 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成...
    faremax閱讀 2,241評論 0 7
  • Ba la la la ~ 讀者朋友們,你們好啊,又到了冷鋒時間,話不多說,發車! 1.冒泡排序(Bub...
    王飽飽閱讀 1,815評論 0 7
  • 說明: 本文中出現的所有算法題皆來自牛客網-劍指Offer在線編程題,在此只是作為轉載和記錄,用于本人學習使用,不...
    秋意思寒閱讀 1,170評論 1 1
  • 跟大叔結婚一年了吧?認識?一年半了吧?現在呢?看不到希望,想離婚。離婚以后怎么辦?不知道。真的不知道。你是在...
    葉琳娜閱讀 189評論 0 0