class Solution {List<List<Integer>> res=new ArrayList<>();List<Integer> li=new ArrayList<>();boolean[] arr;public List<List<Integer>> permute(int[] nums) {arr=new boolean[nums.length];solut(nums);return res;}void solut(int[] nums){if(li.size()==nums.length){res.add(new ArrayList<>(li));return;}for(int i=0;i<nums.length;i++){if(arr[i]){continue;}arr[i]=true;li.add(nums[i]);solut(nums);li.removeLast();arr[i] = false;}}
}
class Solution(object):def permute(self, nums):res=[]li=[]used=[False]*len(nums)def solut(nums):if len(li)==len(nums):res.append(li[:])returnfor i in range(0,len(nums)):if(used[i]):continueli.append(nums[i])used[i]=Truesolut(nums)li.pop()used[i]=Falsesolut(nums)return res
这段代码是用来解决全排列问题的,具体思路如下:res
:用于存储所有可能的排列结果。li
:用于存储当前正在构建的排列。arr
:一个布尔数组,用于标记数组nums
中的元素是否已经被使用.在permute
方法中,首先初始化布尔数组arr
,长度与nums
相同,并将所有元素设置为false
。调用solut
方法,开始递归求解全排列。在solut
方法中,首先判断当前排列li
的长度是否等于nums
的长度:如果等于,说明已经找到一个完整的排列,将其添加到结果集res
中,并返回。如果不等于,继续寻找下一个元素。遍历数组nums
,对于每个元素,如果该元素已经被使用(即arr[i]
为true
),则跳过,否则,将arr[i]
设置为true
,表示该元素已被使用,并将其添加到当前排列li
中。递归调用solut
方法,继续寻找下一个元素。递归返回后,撤销上一步的操作,即将li
中最后一个元素移除,并将arr[i]
设置为false
。最终,res
中存储了所有可能的排列结果,返回res
即可。