题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如,输入数组{3, 32,321},则打印出这3个数字能排成的最小数字321323。
第一思路:利用全排列,然后比较全排列中的数字,得出最小数字。
代码实现:
public class Main {
public static void permutation(String[] str) {
permutation(str, 0, str.length - 1);
}
private static List<String> list = new ArrayList<String>();
private static StringBuilder sb = new StringBuilder();
/** 数组中从索引begin到索引end之间的子数组参与到全排列 */
public static void permutation(String[] str, int begin, int end) {
if (begin == end) { // 只剩最后一个字符时为出口
for (int i = 0; i < str.length; ++i) {
sb.append(str[i]);
}
list.add(sb.toString());
sb.delete(0, sb.toString().length());
} else {
for (int i = begin; i <= end; ++i) { // 每个字符依次固定到数组或子数组的第一个
if (canSwap(str, begi