算法題型的個人練習_03

算法實現:

輸入一個正整數數組,然後輸出該數組中所有數字組成的最大數。

例如,[7,5,9,556,89,11]最大數爲9897556511


算法思想:

對數組按照自定義規則進行排序,在java中,我們可以使用Arrays.sort()方法,並且通過接口Comparator重新編寫排序的規則。


排序規則:

數字位數相同比較兩個數的第一位,誰大誰在前,要是第一位相同就比較第二位,依次類推。

數字位數不同就先補位,使兩個數字位數相同。然後比較。如:7和778比較,使7補位爲777,再比較。


代碼:

public class Algorithm3 {

	public String test(int num[]){
		
		String[] str = new String[num.length];
		int i = 0;
		for(int n : num){
			str[i++] = n + ""; 
		}
		Arrays.sort(str,new Comparator<String>(){

			
			@Override
			public int compare(String o1, String o2) {
				// TODO 自動生成的方法存根
				int length1 = o1.toCharArray().length;//數字的位數
				int length2 = o2.toCharArray().length;				
				StringBuilder s1 = new StringBuilder();//補位的數字
				StringBuilder s2 = new StringBuilder();
				
				//補位方法
				for(int i=0;i<length2;i++){
					s1.append(o1);
				}
				for(int i=0;i<length1;i++){
					s2.append(o2);
				}
				return s2.toString().compareTo(s1.toString());
			}
		});
		
		StringBuilder s = new StringBuilder();
		for(String s3 : str){
			s.append(s3);
		}
		return s.toString();
	}
	
	public static void main(String[] args){
		int number[] = {7,5,9,556,89,11};
		System.out.println("排序數組爲:");
		for(int n : number){
			System.out.print(n + " ");
		}
		System.out.println("");
		Algorithm3 t = new Algorithm3();
		System.out.println("最大數爲:" + t.test(number));
	}
}

結果:

排序數組爲:
7 5 9 556 89 11 
最大數爲:9897556511


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章