思路
每一个回溯算法都可以用树形结构来展示。如下是代码随想录的图
从上面的图中不难看出,每次使用一个元素后就将其在used数组中进行标记,这个不是每一层一个used数组所以不需要在for循环上面重新new数组,这个是和递增子序列不同的地方。
代码
class Solution {
List path = new ArrayList();
List<List> res = new ArrayList();
public List<List> permute(int[] nums) {
boolean[] used = new boolean[nums.length];
fun(nums,used);
return res;
}
public void fun(int[] nums,boolean[] used){
if(path.size() == nums.length){
res.add(new ArrayList(path));
return;
}
for(int i = 0;i<nums.length;i++){
if(used[i] == true){
continue;
}
path.add(nums[i]);
used[i] = true;
fun(nums,used);
path.remove(path.size()-1);
used[i] = false;
}
}
}
© 版权声明
THE END
请登录后查看评论内容