【Java】【演算法練習】輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
阿新 • • 發佈:2019-02-08
題目描述:
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列 {3,32,321},則打印出這三個數字能排成的最小數字為321323。
解題思路:
解題思路: 比較兩個字串s1 S2的大小的時候,先將它們拼接起來,比較s1+s2和s2+s1哪個大,如果s1+s2大,那麼說明s2應該放在前面,此題巧妙應用了字串拼接的知識, 在Integer.valueOf(numbers[i] + numbers[j])中的 numbers[i] + numbers[j]是字串拼接操作 所以在a與b比較的時候,是按位比較。
解題程式碼:
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++){ // Integer.valueOf()的作用是字串轉成int 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++) { // String.valueOf()的作用是int轉字串 str += String.valueOf(numbers[i]);// 此操作還是字串拼接 } return str;
對於上述程式碼做一補充:
在程式碼第七行,程式碼第九行,
int a = Integer.valueOf(numbers[i] + "" + numbers[j]);
在valueOf方法中numbers[i] + "" + numbers[j]其實是字串拼接
例如:int a1 = 10;
int a2 = 20;
String b = "";
System.out.println(a1 + b+a2);
結果如下:1020;
此種程式碼編寫方式巧妙地解決了最終輸出最小數字的比較問題。