现在的位置: 首页 > 综合 > 正文

题目1504:把数组排成最小的数

2018年09月30日 ⁄ 综合 ⁄ 共 1385字 ⁄ 字号 评论关闭
题目描述:

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

输入:

输入可能包含多个测试样例。
对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。
输入的第二行包括m个正整数,其中每个正整数不超过10000000。

输出:

对应每个测试案例,
输出m个数字能排成的最小数字。

样例输入:
3
23 13 6
2
23456 56
样例输出:
13236
2345656
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * @Title: become_min_num.java
 * @Package
 * @Description: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
 * @author nutc
 * @date 2013-8-13 下午8:57:48
 * @version V1.0
 */
public class become_min_num {

	public static void main(String args[]) {
		int n;
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			n = sc.nextInt();
			int[] a = new int[n];
			for(int i = 0;i<n;i++)
				a[i] = sc.nextInt();
			System.out.println(min(a));
		}
	}

	public static String min(int a[]) {
		if (a == null)
			return null;
		String[] value = new String[a.length];
		for (int i = 0; i < value.length; i++) {
			value[i] = intToString(a[i]);
		}
		Mycomparator my  = new Mycomparator();
		Arrays.sort(value,my);

//		 Arrays.toString(value);
		StringBuilder min = new StringBuilder("");
		for (int i = 0; i < value.length; i++) {
			min.append(value[i]);
		}
		String m = min.toString();
		return m;
	}

	public static String intToString(int v) {
		return String.valueOf(v);// TODO
	}

	public static class Mycomparator implements Comparator<String> {  //static !!!!

		public int compare(String t1, String t2) {
			String new1 = t1 + t2;  //TODO
			String new2 = t2 + t1;
			int result = new1.compareTo(new2);
			if (result > 0) {
				return 1;
			} else if (result < 0)
				return -1;
			else
				return 0;
		}
	}
}

抱歉!评论已关闭.