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[:])
return
for i in range(0,len(nums)):
if(used[i]):
continue
li.append(nums[i])
used[i]=True
solut(nums)
li.pop()
used[i]=False
solut(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
即可。