力扣:全排列java

力扣:全排列java

在这里插入图片描述

流程:

设置结果集和当前路径
设置used数组
递归三部曲:
参数和返回值:返回值为空,参数为输入数组
结束条件:当path的长度等于输入数组的长度则path输出到结果集,并返回上一层。
单层递归逻辑
for循环(i=0;i<nums.length;i++)
循环内,判断nums[i]再之前层是否被使用过,使用过则con
tinue。
path输入当前节点
used[i]设置为true//表示使用了
递归(nums)
回溯:当前节点弹出
used[i]设置为false//回溯后设置为fasle

代码:

class Solution {
    List<List<Integer>> result = new ArrayList<>();//结果集
    LinkedList<Integer> path = new LinkedList<>();//当前路径
    boolean[] used; //使用used数组,判断当前节点是否被使用过
    public List<List<Integer>> permute(int[] nums) {//主函数
        used = new boolean[nums.length];//对used数组赋值
        quanpailie(nums);//递归函数
        return result;
    }
    public void quanpailie(int[] nums){//递归函数
        if(path.size() == nums.length){//结束条件,path长度等于nums的长度
            result.add(new ArrayList(path));//则将path输入到结果集,并返回上一层
            return;
        }
        for(int i=0;i<nums.length;i++){
            if(used[i] == true) continue;//节点被使用过就去取数组的下一位
            path.add(nums[i]);//对当前节点输入path
            used[i] = true;设置当前节点为true,被使用
            quanpailie(nums);//递归下一层
            path.removeLast();//回溯弹出当前节点
            used[i] = false;//并将当前节点的used修改为false,表示不使用了
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值