1. 程式人生 > >劍指offer-把數組排成最小的數

劍指offer-把數組排成最小的數

code 位數 排序 pan 數組 一位 AR 描述 color

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

思路:若數組中的數位數都相同,則只需要按照數字從小到大拼接即可,因此將位數不足的數字進行處理,以最後一位作為填補直到位數達到最大位數,最後進行排序即可,需要自己定義一個類存儲處理後的數字和該數字在數組原來的位置。

ac代碼:

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 public class Solution {
 4     public
String PrintMinNumber(int [] numbers) { 5 if(numbers.length==0) 6 return new String(); 7 Arrays.sort(numbers); 8 String []s=new String[numbers.length]; 9 for(int i=0;i<numbers.length;i++){ 10 s[i]=String.valueOf(numbers[i]); 11 }
12 num ob[]=new num[s.length]; 13 int n=s[s.length-1].length(); 14 for(int i=0;i<s.length;i++){ 15 if(s[i].length()<n){ 16 int x=n-s[i].length(); 17 for(int j=0;j<x;j++) 18 s[i]+=s[i].charAt(s[i].length()-1);
19 } 20 ob[i]=new num(); 21 ob[i].index=i; 22 ob[i].x=Integer.valueOf(s[i]); 23 } 24 Arrays.sort(ob); 25 String str=""; 26 for(int i=0;i<ob.length;i++){ 27 str+=String.valueOf(numbers[ob[i].index]); 28 } 29 return str; 30 } 31 class num implements Comparable<num>{ 32 int x; 33 int index; 34 @Override 35 public int compareTo(num o) { 36 // TODO Auto-generated method stub 37 return x-o.x; 38 } 39 40 41 42 } 43 }

劍指offer-把數組排成最小的數