文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
全排列
解题思路
回溯 + 剪枝。
- 每一位都有 3 种选择:1、2、3。
- 每一次都做选择,展开出一棵空间树。
- 利用 hashMap,记录选过的数,下次遇到相同的数,跳过。
代码实现
const permute = (nums: number[]): number[][] => {
const res: number[][] = [];
const used: Record<string, boolean> = {};
const dfs = (path: number[]) => {
if (path.length === nums.length) {
res.push(path.slice());
return;
}
for (const num of nums) {
if (used[String(num)]) continue;
path.push(num);
used[String(num)] = true;
dfs(path);
path.pop();
used[String(num)] = false;
}
};
dfs([]);
return res;
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论