这是一个简短而甜蜜的版本:)
private static boolean hasDistinctDigits(int number) { int numMask = 0; int numDigits = (int) Math.ceil(Math.log10(number+1)); for (int digitIdx = 0; digitIdx < numDigits; digitIdx++) { int curDigit = (int)(number / Math.pow(10,digitIdx)) % 10; int digitMask = (int)Math.pow(2, curDigit);if ((numMask & digitMask) > 0) return false; numMask = numMask | digitMask; } return true; }
它的工作方式非常简单。
numMask是一个整数,用于存储已经遇到的数字(由于十进制系统编号只有10位,而整数给出16位,因此我们有足够的位数来存储出现的每个十进制数字)。
我们遍历数字中的所有数字。对于每个数字索引,我们在中获得实际数字
curDigit。假设当前数字为
5。然后,我们检查它是否将numMask的第5位提高了:如果是,那么我们已经
5在过去遇到过a
,因此我们可以立即知道该数字没有所有不同的数字并返回false;否则,返回false。否则,我们修改
numMask并提高第5位。
如果到最后,则不会遇到重复的数字。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)