如何求解任意三位正整数数字排列后的最大整数?
问题描述
给定范围为 100≤n≤999 的任意三位正整数n,找出对其各位数字排列后能得到的最大整数。
原代码问题分析
提供的Java代码并未实现需求逻辑,它只是固定将十位、个位、百位数字按十位+个位+百位的顺序拼接,完全没有对数字进行排序处理。比如输入123时,原代码会输出231,但正确结果应该是321。
原代码如下:
public static int maxNum(int n) { int j , k ,l, result; String q, z, y ,w; do { j = n % 10; k = n % 100/ 10; l = n % 1000 /100; q =Integer.toString(k); z =Integer.toString(j); y =Integer.toString(l); w= (q+z+y); result =Integer.parseInt(w); break; } while (n >=100 && n<=999); return result; }
正确解法实现
核心思路是将三位数字按从大到小排序后拼接,以下是两种可行实现:
方式1:数字拆分后排序
public static int maxNum(int n) { // 拆分各位数字 int digit1 = n / 100; // 百位 int digit2 = (n / 10) % 10; // 十位 int digit3 = n % 10; // 个位 // 放入数组并从大到小排序 int[] digits = {digit1, digit2, digit3}; for (int i = 0; i < digits.length - 1; i++) { for (int j = 0; j < digits.length - 1 - i; j++) { if (digits[j] < digits[j + 1]) { int temp = digits[j]; digits[j] = digits[j + 1]; digits[j + 1] = temp; } } } // 拼接成最大整数 return digits[0] * 100 + digits[1] * 10 + digits[2]; }
方式2:字符串处理排序
import java.util.Arrays; public static int maxNum(int n) { // 转字符串后拆分为字符数组 char[] digits = String.valueOf(n).toCharArray(); // 默认升序排序后反转得到降序 Arrays.sort(digits); reverse(digits); // 转回整数 return Integer.parseInt(new String(digits)); } // 辅助反转字符数组方法 private static void reverse(char[] arr) { int left = 0, right = arr.length - 1; while (left < right) { char temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } }
输入输出示例
- 输入:165 → 输出:651
- 输入:123 → 输出:321
内容的提问来源于stack exchange,提问作者mohamed Osman
相关产品推荐
相关产品推荐

