輸入一個正整數數組,把數組裏全部數字拼接起來排成一個數,打印能拼接出的全部數字中最小的一個。例如輸入數組 {3,32,321},則打印出這三個數字能排成的最小數字爲 321323。java
數組中全部的數拼接後有可能會超過整數的範圍,所以本題必需要使用字符串來處理。 數組
肯定一個規則,可以判斷 m 和 n 誰在前面,而不是比較出兩個數字誰比較大。spa
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; } }