Mediumbacktracking
Решить задачу Permutations II (LeetCode 47)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
LeetCode 47. Все уникальные permutations массива с duplicates. Сортировка + skip duplicates.
# Подход через counter (проще для понимания)
from collections import Counter
def permuteUnique(nums):
counter = Counter(nums)
result = []
def backtrack(path):
if len(path) == len(nums):
result.append(path[:])
return
for num in counter:
if counter[num] > 0:
counter[num] -= 1
path.append(num)
backtrack(path)
path.pop()
counter[num] += 1
backtrack([])
return result
# Альтернатива: sort + skip
# if i > 0 and nums[i] == nums[i-1] and not used[i-1]: continueЧерез sort + skip: условие nums[i] == nums[i-1] and not used[i-1] гарантирует, что одинаковые элементы берутся в исходном порядке, избегая duplicates. Без duplicates (LeetCode 46) — skip не нужен. Подсчёт по counter — общий паттерн для permutations/subsets с duplicates.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.