Сложность: medium
Даны два целых числа n и k, верните массив всех целых чисел длины n, где разница между каждыми двумя последовательными цифрами равна k. Вы можете вернуть ответ в любом порядке.
Учтите, что целые числа не должны начинаться с нулей. Целые числа, такие как 02 и 043, не допускаются.
Пример:
Input: n = 3, k = 7
Output: [181,292,707,818,929]
Explanation: Note that 070 is not a valid number, because it has leading zeroes.
👨💻 Алгоритм:
1⃣Если n равно 1, верните массив от 0 до 9, так как все однозначные числа являются допустимыми.
2⃣Инициализируйте список очередей начальными цифрами от 1 до 9.
3⃣Для каждого уровня (от 1 до n-1) создайте новый список очередей, добавляя к каждому числу в текущей очереди допустимые цифры, которые удовлетворяют условию разницы k.
😎 Решение:
class Solution {
/**
* @param Integer $N
* @param Integer $K
* @return Integer[]
*/
function numsSameConsecDiff($N, $K) {
if ($N == 1) {
return range(0, 9);
}
$queue = range(1, 9);
for ($level = 1; $level < $N; ++$level) {
$nextQueue = [];
foreach ($queue as $num) {
$tailDigit = $num % 10;
$nextDigits = [$tailDigit + $K, $tailDigit - $K];
foreach ($nextDigits as $nextDigit) {
if ($nextDigit >= 0 && $nextDigit < 10) {
$nextQueue[] = $num * 10 + $nextDigit;
}
}
}
$queue = $nextQueue;
}
return $queue;
}
}Ставь 👍 и забирай 📚 Базу знаний