Сложность: medium
Дан массив nums, состоящий из различных целых чисел, верните все возможные перестановки. Вы можете вернуть ответ в любом порядке.
Пример:
Input: nums = [0,1]
Output: [[0,1],[1,0]]
👨💻 Алгоритм:
1⃣Если длина curr равна длине nums, добавьте копию curr в ans и вернитесь.
2⃣Итерируйтесь по nums. Для каждого num, если num не в curr, выполните следующее:
Добавьте num в curr и вызовите backtrack(curr), затем удалите num из curr.
3⃣Вызовите backtrack с изначально пустым curr.
Верните ans.
😎 Решение:
function permute($nums) {
$ans = [];
$backtrack = function (&$curr) use (&$ans, &$backtrack, $nums) {
if (count($curr) === count($nums)) {
$ans[] = $curr;
return;
}
foreach ($nums as $num) {
if (!in_array($num, $curr)) {
$curr[] = $num;
$backtrack($curr);
array_pop($curr);
}
}
};
$backtrack([]);
return $ans;
}Ставь 👍 и забирай 📚 Базу знаний