给定一个字符串类型的数组,数组元素值为数字组成的字符串对象, 将数组元素的进行拼接,拼接之后的数字值是最大的

来源:互联网 发布:知乎营销案例 编辑:程序博客网 时间:2024/06/08 00:11

今天闲来无事,偶然间看到了一个面试题,意思就是,给定一个字符串数组,数组中的元素为数字构成的字符串,问如何将这些数组元素进行拼接,拼接之后的数字时最大的,对于新手的我,可是费了一番功夫,想了好长时间才想起来如何实现,也算是一个小小的成就。

下面是本人的实现算法,如若有更好的算法,请在下面进行留言评论,希望能够一起学习探讨,闲话少说,直接干代码:

/**
* 将给定的数组元素进行组合,组合成数字最大的数:
* 算法描述:将字符串中的相邻的两个元素进行拼接, 如果前者和后者的拼接小于后者和前者的元素的拼接, * 则将前者和后者进行交换, 否则进行下一对字符串的比较,每比较完成一轮,则将所有的数组元素依次从索 * 引为0的元素开始,通过append()方法,拼接成一个字符串, 然后将其转换为long类型的数字,将该数字与 * 最大值进行比较,如果大于最大值,则将当前的值当做最大值,然后执行下一轮,再次得到一个long类型的最 * 大值,当某轮的最大值等于当前的最大值的时候,该值就是要得到的最终拼接的最大值,此时程序结束

*
*/,则将
public static void zuheNumber() {
String num[] = new String[]{"3","10","34","9","38"};
String emp = "";
boolean flag = true;//标识是否进行下一轮的比较
long currentMaxvalue = 0,maxValue = 0;
StringBuffer sf = new StringBuffer();
do{
for(int i = 0; i < num.length - 1;i++) {
//如果比较的结果为前者小于后者,或者前者等于后者,则将前后两个数组元素进行交换
if((num[i]+num[i+1]).compareTo((num[i+1]+num[i])) < 0 ||(num[i]+num[i+1]).compareTo((num[i+1]+num[i])) == 0) {
emp = num[i];
num[i] = num[i + 1];
num[i + 1] = emp;
}
}

/**
* 交换完成一轮之后,将数组中的每一个元素拼接成一个数值,将每一轮的数值进行比较
* 当某轮的数值等于前一轮的数值的时候,结束改成序,此时的数值既为拼接的最大值
*/

for(int i = 0 ; i < num.length ; i++) {
sf.append(num[i].toString());
}

//输出每一轮拼接后的数组元素
for(int i =0 ; i < num.length ;i++) {
System.out.print(num[i]+",");
}
System.out.println("\n");
System.out.println(sf.toString());
currentMaxvalue = Long.parseLong(sf.toString());
if(currentMaxvalue > maxValue) {
maxValue = currentMaxvalue;
flag = true;
} else if(currentMaxvalue == maxValue) {
flag = false;
}
sf.delete(0, sf.length());
}while(flag);

System.out.println("拼接之后的数组为:");
for(int i = 0 ; i < num.length; i++) {
System.out.print(num[i]+"  ");
}
}


代码至此,整个算法就结束了,小弟才疏学浅,望多多留言指教。如若有误,请多多留言纠正,感激不尽。


阅读全文
0 0
原创粉丝点击