Java:如何判断数字各位是否唯一?是否有JDK方法判断全同数字?
嘿,这两个问题都是Java里处理数字各位的常见需求,我来给你详细拆解一下:
问题1:如何使用Java判断一个数字的各位数字是否互不相同?
这里有两种实用的实现思路,你可以根据场景选择:
- 方法1:字符串结合HashSet(代码简洁易读)
把数字转成字符串后,用HashSet来记录出现过的字符——因为Set不允许重复元素,一旦发现某个字符无法加入Set,就说明存在重复数字。
public static boolean hasUniqueDigits(int num) { // 处理负数,负号不影响数字本身的各位判断 String numStr = String.valueOf(Math.abs(num)); Set<Character> digitSet = new HashSet<>(); for (char c : numStr.toCharArray()) { // add方法返回false表示元素已存在 if (!digitSet.add(c)) { return false; } } return true; }
这种方法的优势是代码直观,容易理解,而且一旦发现重复就会提前终止循环,不会做多余的操作。
- 方法2:纯数学运算(无字符串转换,性能更优)
如果是对性能敏感的场景,可以用取模和除法逐个取出各位数字,用一个布尔数组记录数字是否出现过(数字范围是0-9,数组大小10足够)。
public static boolean hasUniqueDigitsMath(int num) { num = Math.abs(num); boolean[] seenDigits = new boolean[10]; while (num > 0) { int digit = num % 10; if (seenDigits[digit]) { return false; } seenDigits[digit] = true; num = num / 10; } return true; }
这种方法避免了字符串对象的创建和转换开销,在高频调用的场景下表现更好。
问题2:是否存在JDK内置方法判断全相同数字?有没有更优方案?
首先明确:JDK并没有直接提供这类判断的内置方法,不过我们可以用几种比单纯循环更优雅高效的方式实现:
- 方法1:正则表达式(最简洁)
利用正则^(\\d)\\1*$,意思是匹配第一个数字,后面跟着任意多个和它相同的数字。代码非常简洁:
public static boolean isAllSameDigits(int num) { String numStr = String.valueOf(Math.abs(num)); return numStr.matches("^(\\d)\\1*$"); }
这种方法可读性拉满,对于大多数业务场景来说,正则的匹配效率完全够用。
- 方法2:优化版数学循环
不需要记录所有数字,只需要记住第一个数字,然后逐个对比后续的数字是否和它一致,一旦发现不同就返回false:
public static boolean isAllSameDigitsMath(int num) { num = Math.abs(num); int firstDigit = num % 10; while (num > 0) { if (num % 10 != firstDigit) { return false; } num = num / 10; } return true; }
这种方法逻辑简单,没有额外的存储空间开销,性能和纯循环差不多,但代码更聚焦。
- 方法3:数字特性巧解(适合小范围整数)
全相同的n位数字可以表示为digit * (111...1)(n个1),而111...1等于(10^n - 1)/9。利用这个特性可以直接构造目标数字进行比较:
public static boolean isAllSameDigitsSpecial(int num) { num = Math.abs(num); if (num == 0) return true; // 0的各位都是0 int digit = num % 10; int digitCount = String.valueOf(num).length(); // 构造对应的全相同数字 int targetNum = digit * (int)(Math.pow(10, digitCount) - 1) / 9; return num == targetNum; }
注意:这种方法要小心整数溢出问题,当数字位数较多时,Math.pow转int可能会有精度丢失,所以更适合小范围的整数判断。
内容的提问来源于stack exchange,提问作者Tnadev
相关产品推荐
相关产品推荐

