算法學習之把數組排成最小的數

題目描述

輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。

上來直接幹也行,但是好像別人的技巧更秒:即a+""+b與b+""+a比較,如果a+""+b>b+""+a,則a該跟b換換位置了。

import java.util.ArrayList;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
      if(numbers==null||numbers.length<=0) return "";
      for(int i =0; i<numbers.length;i++){
          for(int j = i+1;j<numbers.length;j++){
              int sum1 = Integer.valueOf(numbers[i]+""+numbers[j]);
              int sum2 = Integer.valueOf(numbers[j]+""+numbers[i]);
              if(sum1>sum2){
                  int tem = numbers[i];
                  numbers[i] = numbers[j];
                  numbers[j] = tem;
              }
          }
      }
      // 這裏最好使用StringBuilder拼接,因爲用字符串累加其實最終調用的也是new StringBuilder,會new很多無用的對象
      StringBuilder str = new StringBuilder();
      for(int i = 0;i<numbers.length;i++){
          str.append(numbers[i]);
      }  
      return str.toString();
    }
}
  • 時間複雜度:O(nlogn)。
  • 空間複雜度:O(n)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章