题目描述
给出一系列非负整数,使用这些数组合成一个最大数。
输入
第一行数组长度
第二行一个非负整数数组。
输出
一个最大整数,用字符串表示。
样例输入
5
4 1 8 20 23
样例输出
8423201
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] array = new int[n];
for(int i=0; i<n; i++)
array[i] = input.nextInt();
StringBuffer[] s = new StringBuffer[n];
for(int i=0; i<n; i++)
{
s[i] = new StringBuffer();
s[i].append(array[i]);
}
StringBuffer out = new StringBuffer();
char a;
int key = 0, j = 0;
while(key != n)
{
a = '0';
for(int i=0; i<n; i++)
{
if(s[i] != null && a <= s[i].charAt(0))
{
while(s[j] == null)
j++;
int k1 = 0, k2 = 0;
while((k1 < s[j].length() || k2 < s[i].length()) && a == s[i].charAt(0))
{
if(k1+1 == s[j].length() && k2+1 < s[i].length())
{
k2++;
if(s[j].charAt(0) < s[i].charAt(k2))
{
j = i;
break;
}
}
else if(k2+1 == s[i].length() && k1+1 < s[j].length())
{
k1++;
if(s[j].charAt(k1) < s[i].charAt(0))
{
j = i;
break;
}
}
else if(k1+1 < s[j].length() && k2+1 < s[i].length())
{
k1++;
k2++;
if(s[j].charAt(k1) < s[i].charAt(k2))
{
j = i;
break;
}
}
else if(k1+1 == s[j].length() && k2+1 == s[i].length())
break;
}
if(a < s[i].charAt(0))
j = i;
a = s[j].charAt(0);
// if(flag[i]+1 != s[i].length())
// {
// flag[i]++;
// }
}
}
out.append(s[j]);
s[j] = null;
j = 0;
key++;
}
System.out.print(out.toString());
}
}