题目描述
给定一个正整型数组,将数组中各个元素组合成一个数,输出组合结果最大的那个数。
示例
输入: {9, 3, 32, 33, 303}
输出: 9333323030
解析
按照正常排序算法,重写比较函数,例如3与302比较大小,则转换为333与302比较大小。
public int getMaxNumber(int[] nums) {
int len = nums.length;
for(int i=0; i<len; i++){
for(int j=i+1; j<len; j++){
if(compare(nums[i], nums[j])){
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
}
return genResult(nums);
}
public boolean compare(int i, int j) {
String strI = String.valueOf(i);
String strJ = String.valueOf(j);
int maxLen = Math.max(strI.length(), strJ.length());
if (strI.length() == strJ.length()) return i < j;
if(strI.length() != maxLen){
while(strI.length() != maxLen){
strI = strI + strI.charAt(strI.length()-1);
}
}
if(strJ.length() != maxLen){
while(strJ.length() != maxLen){
strJ = strJ + strJ.charAt(strJ.length()-1);
}
}
return Integer.valueOf(strI) < Integer.valueOf(strJ);
}
public int genResult(int[] nums) {
StringBuilder builder = new StringBuilder();
for(int i=0; i<nums.length; i++) {
builder.append(nums[i]);
}
return Integer.valueOf(builder.toString());
}