把數組排成最小的數

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

 

解題思路

數組中全部的數拼接後有可能會超過整數的範圍,所以本題必需要使用字符串來處理。 數組

肯定一個規則,可以判斷 m 和 n 誰在前面,而不是比較出兩個數字誰比較大。spa

  • 先將整型數組轉換成 String 數組;
  • 而後將 String 數組排序;
  • 最後將排好序的字符串數組拼接出來,這裏關鍵就是制定排序規則。
  • 咱們制定的排序規則是要求兩個字符串的拼接進行比較:
  • 若ab > ba 則 a > b,
    • 若ab < ba 則 a < b,
    • 若ab = ba 則 a = b;
    • 如 2 21 由於 212 < 221 因此 排序後爲 21 2

public String PrintMinNumber(int[] numbers) {
    if (numbers == null || numbers.length == 0)
        return "";
    int n = numbers.length;
    String[] nums = new String[n];
    for (int i = 0; i < n; i++)
        nums[i] = numbers[i] + "";
    Arrays.sort(nums, (s1, s2) -> (s1 + s2).compareTo(s2 + s1));
    String ret = "";
    for (String str : nums)
        ret += str;
    return ret;
}

 

 

 

import java.util.ArrayList;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        String str = "";
        for (int i=0; i<numbers.length; i++){
            for (int j=i+1; j<numbers.length; j++){
                int a = Integer.valueOf(numbers[i]+""+numbers[j]);
                int b = Integer.valueOf(numbers[j]+""+numbers[i]);
                if (a > b){
                    int t = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = t;
                }
                 
            }
        }
        for (int i = 0; i < numbers.length; i++) {
            str += String.valueOf(numbers[i]);
        }
        return str;
    }
}
相關文章
相關標籤/搜索