Сложность: 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 {
func numsSameConsecDiff(_ N: Int, _ K: Int) -> [Int] {
if N == 1 { return Array(0...9) }
var queue = Array(1...9)
for _ in 1..<N {
var nextQueue = [Int]()
for num in queue {
let tailDigit = num % 10
let nextDigits = [tailDigit + K, tailDigit - K]
for nextDigit in nextDigits where 0 <= nextDigit && nextDigit < 10 {
nextQueue.append(num * 10 + nextDigit)
}
}
queue = nextQueue
}
return queue
}
}Ставь 👍 и забирай 📚 Базу знаний