查找首尾数字相同的整数的Java方法实现求助
解决方案
首先,你需要实现两个辅助方法来获取整数的首数字和尾数字,这是判断的核心:
private static int getFirstDigit(int num) { num = Math.abs(num); // 处理负数,确保首数字为正整数 while (num >= 10) { num /= 10; } return num; } private static int getLastDigit(int num) { return Math.abs(num) % 10; // 处理负数,尾数字取绝对值后的余数 }
接着修改你原有的方法,在循环中比较两个数字的首尾数字是否分别匹配,同时避免重复添加元素到结果列表:
import java.util.ArrayList; import java.util.List; public class NumberMatcher { public int[] findDuplicates(int[] a) { List<Integer> result = new ArrayList<>(); for (int i = 0; i < a.length; i++) { for (int j = i + 1; j < a.length; j++) { int firstI = getFirstDigit(a[i]); int lastI = getLastDigit(a[i]); int firstJ = getFirstDigit(a[j]); int lastJ = getLastDigit(a[j]); if (firstI == firstJ && lastI == lastJ) { // 避免重复添加同一元素 if (!result.contains(a[i])) { result.add(a[i]); } if (!result.contains(a[j])) { result.add(a[j]); } } } } return result.stream() .mapToInt(Integer::intValue) .toArray(); } private static int getFirstDigit(int num) { num = Math.abs(num); while (num >= 10) { num /= 10; } return num; } private static int getLastDigit(int num) { return Math.abs(num) % 10; } }
关键说明
- 辅助方法通过
Math.abs处理负数,确保数字正负不影响首尾数字的判断逻辑。 - 双重循环遍历所有元素对,当两个元素的首、尾数字分别相同时,将它们加入结果列表,同时通过
contains方法避免重复添加。 - 最后利用Stream将
List<Integer>转换为int[]类型返回。
内容的提问来源于stack exchange,提问作者eScape CS
相关产品推荐
相关产品推荐

