226.全排列

发布于:2025-02-28 ⋅ 阅读:(101) ⋅ 点赞:(0)

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即可。