好久没写算法题了
昨天一个远房弟弟找到我,让我帮做个题,正好练练手吧,记在这里
题目
任务:随机给出三个整数分别存放在变量【A】、【B】、【C】中,如果将它们连成一排,将会得到一个多位整数。请你找出各种 连接方法得到的最大的多位整数,将它存放到变量【结果】中;
注意:【A】、【B】、【C】的值已经帮你存好了,你不需要再修 改它们,直接使用即可;举例:【A】为13,【B】为312,【C】为343,连接成的最大整数应该为34331213,要将它存到变量【结果】里;编程对象:禾木;特殊规则:不能删除给出的变量、列表和角色,可以新建变量、列表辅助解题。会进行多次检验,你编写的代码不能永远不停地执行,不能使用【停止全部】代码块。
分析
全排列,比大小
代码
import java.util.ArrayList;
import java.util.List;
public class IntegerCombination {
private static List<Integer> allPossibleResults = new ArrayList<>();
public static void main(String[] args) {
int a = 12;
int b = 34;
int c = 56;
int max = findMaxIntCombination(new int[]{a, b, c});
System.out.println("max = " + max);
}
private static int findMaxIntCombination(int[] ints) {
perm(ints);
return findMax(allPossibleResults);
}
private static void perm(int[] s) {
if (s == null || s.length == 0) {
return;
}
_perm(s, 0, s.length - 1);
}
private static void _perm(int[] s, int start, int end) {
if (start == end) {
allPossibleResults.add(buildBigInt(s));
return;
}
for (int i = start; i <= end; i++) {
swap(s, start, i);
_perm(s, start + 1, end);
swap(s, start, i);
}
}
private static Integer buildBigInt(int[] s) {
StringBuilder result = new StringBuilder();
for (int i : s) {
result.append(i);
}
return Integer.valueOf(result.toString());
}
private static void swap(int[] s, int start, int i) {
int tmp = s[start];
s[start] = s[i];
s[i] = tmp;
}
private static int findMax(List<Integer> result) {
int max = Integer.MIN_VALUE;
for (Integer integer : result) {
if (integer > max) {
max = integer;
}
}
return max;
}
}