問題描述:
給出一個整型數組,所有數字均>=0,問如何組合集中的數字才能形成一個最大的數字。
例如給出:[3, 30, 34, 5, 9]
,
-----> 9534330
.
思路:本人從字符串排序的角度考慮,試圖將所有數字看成字符串一起去排序,但是過程極其繁瑣,放棄。於是考慮從小範圍開始排序,不在放眼全局。例如先將前兩個3,30進行排序--->可以組成330和303兩種,顯然選擇330這種順序。再講第三個數字拿過來,是放在3左邊呢,還是放在3和30中間呢,還是放在30後邊呢?顯然將某數字放在最左側,表明以這個數字開頭的組合是最大的;反之,放在最右側說明這個數字不合適放在其他所有數字的前邊(廢話)。
規律總結爲:每拿到一個新數字,遍將它與在它之前的所有已經排好序的數字進行組合後的比較----->這不就是插入排序啊!!!
AC代碼:
class Solution {
public String largestNumber(int[] nums) {
for (int i = 1; i < nums.length; i++) {
int j = i;
int temp = nums[j];
while (j > 0 && (String.valueOf(temp) + String.valueOf(nums[j - 1])).compareTo((String.valueOf(nums[j - 1]) + String.valueOf(temp))) >= 0)
//System.out.println();
{
nums[j] = nums[j - 1];
j--;
}
nums[j] = temp;
}
String sum="";
for (int i = 0; i < nums.length; i++) {
sum+=String.valueOf(nums[i]);
}
if(sum.indexOf("0")==0)sum="0";
return sum;
}
}