输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
输入:nums = [0,1]
输出:[[0,1],[1,0]]
输入:nums = [1]
输出:[[1]]
function permute(nums: number[]): number[][] {
const res: number[][] = [];
// 回溯函数
const backtrack = (path: number[]) => {
// 满足当前条件
if(path.length === nums.length) {
res.push(path);
return;
}
// 遍历
for(let i = 0; i < nums.length; i++) {
if(path.includes(nums[i])) continue;
backtrack(path.concat(nums[i]));
}
}
backtrack([]);
return res;
}
n! = 1*2*3*...*(n-1)*n
function permute(nums: number[]): number[][] {
const res: number[][] = [];
const backtrack = function(start: number) {
if (start === nums.length - 1) {
res.push([...nums]);
return;
}
for (let i: number = start; i < nums.length; i++) {
[nums[i], nums[start]] = [nums[start], nums[i]]; // 交换
backtrack(start + 1); // 下一个数
[nums[i], nums[start]] = [nums[start], nums[i]]; // 交换撤销
}
}
backtrack(0); // 从 0 开始
return res;
};
回溯算法与递归
原文地址:https://blog.csdn.net/Tyro_java/article/details/134689827
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_45052.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!