// n % 10 extracts the last digit.
// 1 << digit creates a bitmask for that digit.
// mask & bit checks whether the bit for this digit is already set.
// Mark the digit as seen: mask |= bit; This sets the bit for the current digit.
function allDigitsUnique(int $n): bool {
$mask = 0;
while ($n > 0) {
$digit = $n % 10;
$bit = 1 << $digit;
if ($mask & $bit) {
return false; // digit already seen
}
$mask |= $bit;
$n = intdiv($n, 10);
}
return true;
}
$n = 123456;
echo allDigitsUnique($n) ? "Unique\n" : "Not unique\n";
$n = 123452;
echo allDigitsUnique($n) ? "Unique\n" : "Not unique\n";
/*
run:
Unique
Not unique
*/