思路解析
首先使用冒泡排序,让数组的中的每两个元素拼接后比较,比较规则是:若 a 拼接 b,大于 b 拼接 a,则将a放到数组前面。最后将排序后的所有值,取出来,拼接为字符串返回。
Ps:所有的比较和拼接都是用字符串来实现,可以避免大数溢出问题
完整代码
using System;
using System.Text;
/// <summary>
/// 思路: 使用冒泡排序,让数组的中的每两个元素拼接后比较,比较规则是:若 a 拼接 b,大于 b 拼接 a,则将a放到数组前面。最后将排序后的所有值,取出来,拼接为字符串返回。
/// Ps:所有的比较和拼接都是用字符串来实现,可以避免大数溢出问题
/// </summary>
public class MaxArrayJoint
{
/*
给定一个数组:组合成最大数值
*/
public static string DoMaxArrayJoint(int[] args)
{
if (args.Length == 1)
{
return args[1].ToString();
}
//先将数组中所有的元素,转换为字符串,防止在冒泡时频繁的ToString
string[] argsString = new string[args.Length];
for (int i = 0; i < args.Length; i++)
{
argsString[i] = args[i].ToString();
}
//参数数组已无用,可以置空,以垃圾回收
args = null;
string tempStringToSwap = null;
//冒泡排序,以完成对每个拼接数的比较
for (int i = 0; i < argsString.Length - 1; i++)
{
for (int j = i + 1; j < argsString.Length; j++)
{
/*
比较两个数字哪个作高位排列
example: 9, 98 --> 998; 15, 18 --> 1815
*/
if (string.Compare(argsString[i] + argsString[j], argsString[j] + argsString[i]) == 1)
{
tempStringToSwap = argsString[i];
argsString[i] = argsString[j];
argsString[j] = tempStringToSwap;
}
}
}
//输出最终结果
StringBuilder stringBuilder = new StringBuilder();
for (int i = argsString.Length - 1; i >= 0; i--)
{
stringBuilder.Append(argsString[i]);
}
return stringBuilder.ToString();
}
public static void Main()
{
int[] test = { 478744, 151, 98716, 99999, 1111111111, 222979891, 1649817484 };
Console.Write(DoMaxArrayJoint(test));
Console.ReadKey();
}
}