求整数数组的最大组合:Java代码输出错误的技术求助
解决整数数组最大组合排序问题
你的问题出在排序逻辑的比较规则错误:直接使用字符串的字典序降序排序,无法保证拼接后得到最大的数字组合。比如对于"7"和"75",字典序"75" > "7",但拼接后"775" > "757",所以应该把"7"放在"75"前面,这才是正确的顺序。
正确的比较规则
对于两个字符串a和b,我们需要比较a + b和b + a的字典序:
- 如果
a + b的字典序大于b + a,说明a应该排在b前面 - 反之则
b排在a前面
修正后的代码
你可以直接使用Java自带的Arrays.sort配合自定义Comparator,简洁高效:
import java.util.*; public class classwork6 { public static void main(String[] args) { int[] list = {10, 68, 75, 7, 21, 12}; String[] arr = new String[list.length]; for (int i = 0; i < list.length; i++) { arr[i] = String.valueOf(list[i]); } // 自定义排序规则:按拼接后的字符串降序排列 Arrays.sort(arr, (a, b) -> (b + a).compareTo(a + b)); // 拼接结果并输出 StringBuilder result = new StringBuilder(); for (String s : arr) { result.append(s); } System.out.println(result.toString()); } }
代码说明
- 自定义
Comparator中,(b + a).compareTo(a + b)的作用是:如果b+a比a+b大,就把b放在a前面,反之则a在前,确保拼接后的整体是最大数字。 - 用
StringBuilder拼接结果比replaceAll更高效直观。
运行这段代码后,数组会被排序为["7", "75", "68", "21", "12", "10"],拼接后得到正确结果77568211210。
如果你想保留自己的冒泡排序方法,只需修改排序中的判断条件:
static void sort(String[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++) { // 比较a+b和b+a的大小,把更大的组合放在前面 if ((arr[i] + arr[j]).compareTo(arr[j] + arr[i]) < 0) { String temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } }
修改后原排序方法也能输出正确结果。
内容的提问来源于stack exchange,提问作者IH8COFFEE
相关产品推荐
相关产品推荐

