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

import java.util.ArrayList;
import java.util.List;
/**
 * 
 * @author Youjc
 * @date 2018年3月14日
 */
public class Solution {
	String result = "";
	List<String> abclist = new ArrayList<String>();


	public String PrintMinNumber(int[] numbers) {
		int length = numbers.length;
		if(length==0)
		{
			return "";
		}
		else if (length == 1) {
			return String.valueOf(numbers[0]);
		} else if (length == 2) {
			String value1 = String.valueOf(numbers[0])+String.valueOf(numbers[1]);
			String value2 = String.valueOf(numbers[1])+String.valueOf(numbers[0]);
			if(Long.parseLong(value1)<=Long.parseLong(value2))
			{
				return value1;
			}else
			{
				return value2;
			}
		} else {
			for (int i = 0; i < numbers.length; i++) {
				List<Integer> numflaglist = new ArrayList<Integer>();
				numflaglist.add(i);
				Finalcial(numbers, length, numflaglist, String.valueOf(numbers[i]));
			}
			System.out.println(abclist);


			long minvalue = Long.parseLong(abclist.get(0));
			for (int i = 1; i < abclist.size(); i++) {
				if (Long.parseLong(abclist.get(i)) < minvalue) {
					minvalue = Long.parseLong(abclist.get(i));
				}
			}


			return String.valueOf(minvalue);
		}


	}


	public static void main(String[] args) {
		System.out.println(new Solution().PrintMinNumber(new int[] { 1, 2 }));
	}


	public List<String> Finalcial(int[] numbers, int length, List<Integer> numflag, String originvalue) {
		if (length == 2) {
			List<String> twovalue = new ArrayList<String>();
			for (int k = 0; k < numbers.length; k++) {
				if (!numflag.contains(k)) {
					twovalue.add(String.valueOf(numbers[k]));
				}
			}


			String value1 = originvalue + twovalue.get(0) + twovalue.get(1);
			String value2 = originvalue + twovalue.get(1) + twovalue.get(0);
			abclist.add(value1);
			abclist.add(value2);
		} else {
			int t = length - 1;
			if (t == 2) {
				Finalcial(numbers, t, numflag, originvalue);
			} else {
				for (int k = 0; k < numbers.length; k++) {
					if (!numflag.contains(k)) {
						String value = "";
						numflag.add(k);
						value = originvalue + String.valueOf(numbers[k]);
						Finalcial(numbers, t, numflag, value);
						for (int d = 0; d < numflag.size(); d++) {
							if (numflag.get(d) == k) {
								numflag.remove(d);
							}
						}
					}
				}
			}


		}
		return abclist;
	}
}

猜你喜欢

转载自blog.csdn.net/youjianchi/article/details/79557312