zoukankan      html  css  js  c++  java
  • LeetCode-回溯算法篇

    思路:

    解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:
    1、路径:也就是已经做出的选择。
    2、选择列表:也就是你当前可以做的选择。
    3、结束条件:也就是到达决策树底层,无法再做选择的条件。

    回溯算法的框架:
    result = []
    def backtrack(路径, 选择列表):
        if 满足结束条件:
            result.add(路径)
            return
    
        for 选择 in 选择列表:
            做选择
            backtrack(路径, 选择列表)
            撤销选择
    

    其核心就是 for 循环里面的递归,在递归调用之前「做选择」,在递归调用之后「撤销选择」

    全排列问题

    题目描述
    给定一个 没有重复 数字的序列,返回其所有可能的全排列。

    代码题解:
    class Solution {
        List<List<Integer>> res = new LinkedList<>();
        public List<List<Integer>> permute(int[] nums) {
            LinkedList<Integer> track = new LinkedList<Integer>();
            backTrack(nums,track);
            return res;
        }
        
    // 路径:记录在 track 中
    // 选择列表:nums 中不存在于 track 的那些元素
    // 结束条件:nums 中的元素全都在 track 中出现
        void backTrack(int[] nums,LinkedList<Integer> track) {
            // 结束条件
            if(track.size() == nums.length) {
                res.add(new LinkedList(track));
                return;
            }
            for(int i=0;i<nums.length;i++) {
                //遍历选择条件列表
                if(track.contains(nums[i])) {
                    continue;
                }
                // 做选择
                track.add(nums[i]);
                // 进入下一层决策树
                backTrack(nums,track);
                // 撤销选择
                track.remove(track.size() -1);
            }
        }
    }
    
    
  • 相关阅读:
    InfoPath 发布表单到SharePoint库报错
    在log4net中控制nhibernate输出
    微信扫一扫(wx.scanQRCode)功能新手可能遇到的问题
    3.Zookeeper的安装和配置(集群模式)
    1.配置HDFS HA (高可用)
    2.Zookeeper工作原理(详细)
    1.Zookeeper 定义与工作原理
    js 获取元素的几种方法
    弹出层居中
    XUACompatible
  • 原文地址:https://www.cnblogs.com/RealGang/p/14584064.html
Copyright © 2011-2022 走看看