把數組排成最小的數


題目描述

輸入一個正整數數組,把數組里所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字為321323。
 
 
這道題目比較數組組成字符之后的大小,所以很自然的想到了大數問題。所以整個過程都要使用字符串來比較和保存。
思路: 並不是a<b那么ab<ba,因為3,31拼成331>313,所以我們應該設置自己的一套比較規則,如果ab<ba那么稱為a<b,所以我們需要做的是把整個數組按照我們的比較規則從小到大排列。然后從頭到尾用字符串的形式串起來。
因為對java不熟,所以沒有用比較器,而是用了傳統的冒泡,調用自己構建的比較函數
比較函數  是把兩個按照字符串的形式串起來然后 調用 str1.compareTo(str2)的方法,若str1大於str2那么返回正值,否則返回負值。
 
上代碼
import java.util.*;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        for(int i=0;i<numbers.length;i++){
            for(int j=numbers.length-1;j>i;j--){
                if(compare(numbers[j-1],numbers[j])>0){
                    int temp=numbers[j-1];
                    numbers[j-1]=numbers[j];
                    numbers[j]=temp;
                }
            }
        }
        String ans="";
        for(int i=0;i<numbers.length;i++){
            ans+=numbers[i];
        }
        return ans;
    }
    public int compare(int int1,int int2){
        String str1=int1+""+int2;
        String str2=int2+""+int1;
        return str1.compareTo(str2);
    }
}

 

 

附帶java比較器代碼,這個直接調用sort函數,使用自定義規則比較,直接替換上邊的冒泡過程即可

 Collections.sort(list, new Comparator<Integer>(){
  
  public int compare(Integer str1,Integer str2){
   String s1=str1+""+str2;
   String s2=str2+""+str1;
         return s1.compareTo(s2);
     }
  });

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM