日期:2014-05-20  浏览次数:20554 次

考思维,拼数组问题
给定一个自然数数组,把里面的所有元素拼起来,使它成为一个最大的自然数,比如说[9,12,4],就是拼成9412 ,注意,是不同元素拼起来,每个元素是不能拆的
------解决方案--------------------
引用:
给定一个自然数数组,把里面的所有元素拼起来,使它成为一个最大的自然数,比如说[9,12,4],就是拼成9412 ,注意,是不同元素拼起来,每个元素是不能拆的

按照你的这种说法 
应该是 "9">"12" "9">"4" "4">"12" 
1.想办法消除重复,
2,比较整数的首位,首位大就说明数值大,如果首位相等,继续比较次位,次位大则数值大,依次类推

由于这里我充分利用java提供的API,示例代码:


import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

class IntegerCompareComparator implements Comparator {
    public int compare(Object i, Object j) {// 实现接口方法,必须遵循比较规则
// 比较整数的首位,首位大就说明数值大,如果首位相等,继续比较次位,次位大则数值大,依次类推
return i.toString().compareTo(j.toString()) > 0 ? 1 : (i.toString()
.compareTo(j.toString()) == 0 ? 0 : -1);
    }
}

public class ReadLine {

    public static void main(String[] args) {
int integers[] = { 9, 12, 4 };
TreeSet sortset = new TreeSet<Integer>(new IntegerCompareComparator());// 添加比较器
for (int i = 0; i < integers.length; i++) {
    sortset.add(integers[i]);// TreeSet自动会消除重复,还能根据比较器排序
}

String tempString = "";
// 最先遍历的是最小的 比如 12 4 9
for (Iterator<Integer> iterator = sortset.iterator(); iterator
.hasNext();) {
    Integer i = iterator.next();
    tempString = i.intValue() + tempString;// 构建字符串,右边为“最小”的整数
}
int i = Integer.parseInt(tempString);
System.out.println(i);//output

    }
}
/*output:
9412
 */