Leetcode之回溯法专题-46. 全排列(Permutations)
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
分析:利用回溯法,回溯vis数组,表示是否选择了该数字,例如vis[1]=1代表选择了下标为1的数字。
AC代码:
class Solution { List<List<Integer>> ans = new ArrayList<>(); int vis[] = null; public List<List<Integer>> permute(int[] nums) { vis = new int[nums.length]; Arrays.fill(vis,0); dfs(nums,0,new ArrayList<Integer>()); return ans; } public void dfs(int nums[],int position,ArrayList<Integer> tmp){ if(position>nums.length-1){ if(tmp.size()==nums.length){ ans.add(new ArrayList<>(tmp)); } return; } for(int i=0;i<nums.length;i++){ if(vis[i]==1) continue; vis[i] = 1; tmp.add(nums[i]); dfs(nums,position+1,tmp); tmp.remove(tmp.size()-1); vis[i] = 0; } } }
本文解析了LeetCode上的经典题目“全排列”,通过回溯法实现无重复数字序列的所有可能排列,提供AC代码示例。
&spm=1001.2101.3001.5002&articleId=101590773&d=1&t=3&u=bfd2d4a1c9fb4741ba1c0e21319f53e8)
589

被折叠的 条评论
为什么被折叠?



