编程语言剑指offer计划28(搜索与回溯算法困难)---java

1.1、题目1

剑指 Offer 37. 序列化二叉树

1.2、解法

这题给我笑死了,我看到题解有个解法,我愿称之为神。

public class Codec {

    private TreeNode root;
    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        this.root = root;
        return null;
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        return root;
    }
}

真的是神仙般的人物。
这里serialize是通过BFS遍历实现的,存放到StringBuilder中最终转String返回。
deserialize也是BFS,只不过是反操作。

1.3、代码

public class Codec {
    public String serialize(TreeNode root) {
        if(root == null) return "[]";
        StringBuilder res = new StringBuilder("[");
        Queuequeue = new LinkedList<>() {{ add(root); }};
        while(!queue.isEmpty()) {
            TreeNode node = queue.poll();
            if(node != null) {
                res.append(node.val + ",");
                queue.add(node.left);
                queue.add(node.right);
            }
            else res.append("null,");
        }
        res.deleteCharAt(res.length() - 1);
        res.append("]");
        return res.toString();
    }

    public TreeNode deserialize(String data) {
        if(data.equals("[]")) return null;
        String[] vals = data.substring(1, data.length() - 1).split(",");
        TreeNode root = new TreeNode(Integer.parseInt(vals[0]));
        Queuequeue = new LinkedList<>() {{ add(root); }};
        int i = 1;
        while(!queue.isEmpty()) {
            TreeNode node = queue.poll();
            if(!vals[i].equals("null")) {
                node.left = new TreeNode(Integer.parseInt(vals[i]));
                queue.add(node.left);
            }
            i++;
            if(!vals[i].equals("null")) {
                node.right = new TreeNode(Integer.parseInt(vals[i]));
                queue.add(node.right);
            }
            i++;
        }
        return root;
    }
}

2.1、题目2

剑指 Offer 38. 字符串的排列

2.2、解法

回溯的万能模板

def backtrack(...):
    for 选择 in 选择列表:
        做选择
        backtrack(...)
        撤销选择

这里也挺奇怪,居然不是返回list,就定了hashset最后再遍历进字符串数组返回,
注意这里是不重复,所以,创建要给visited数组来判断是否遍历过该字符。

2.3、代码

class Solution {
    HashSetres = new HashSet();
    boolean []visited;
    public String[] permutation(String s) {
        visited = new boolean[s.length()];
        StringBuffer stringb = new StringBuffer();
        back(s,stringb);
        String []resarr = new String[res.size()];
        int i=0;
        for(String a:res){
            resarr[i]=a;
            i++;
        }
        return resarr;
    }
    public void back(String s,StringBuffer stringb){
        if(stringb.length()==s.length()) {
            res.add(stringb.toString());
            return;
        }
        for(int i=0;i<s.length();i++){ if(visited[i]="=true)" continue;="" stringb.append(s.charat(i));="" visited[i]="true;" back(s,stringb);="" stringb.deletecharat(stringb.length()-1);="" }=""

文章来源:https://www.cnblogs.com/urmkhaos/p/15346348.html

百度网盘搜索
www.ijzcn.cn
阿哇教育
www.awaedu.com
作文哥
www.zuowenge.cn
搜码吧
www.somanba.cn
(0)

相关推荐

  • Leetcode l872. 叶子相似的 做题小结

    题目: 请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 . 举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树. 如果有两棵二叉树的叶值序 ...

  • BFS解打开转盘锁

    You see, madness, as you know, is like gravity. All it takes is a little push! 疯狂就像地心引力,需要做的只是轻轻一推. ...

  • 二叉树的最小深度

    一.需求 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 输入:root = [3,9,20,null,null,15 ...

  • HashMap详解

    原文链接http://zhhll.icu/2020/12/10/java%E5%9F%BA%E7%A1%80/%E9%9B%86%E5%90%88/HashMap%E8%AF%A6%E8%A7%A3/ ...

  • ​LeetCode刷题实战100:相同的树

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战235:二叉搜索树的最近公共祖先

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战236:二叉树的最近公共祖先

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • 编程语言剑指offer计划25(模拟中等)---java

    1.1.题目1 剑指 Offer 29. 顺时针打印矩阵 1.2.解法 常规开头,先判断特殊情况,然后创建四个变量存放矩阵四边的长度限制. 创建res数组存放结果. 循坏开始,遍历完一行或者一列,就将 ...

  • 剑指offer计划7(搜索与回溯算法简单版)---java

    1.1.题目1 剑指 Offer 26. 树的子结构 1.2.解法 这题看了解法,感叹真的6,代码量减了很多. (A != null && B != null) && ...

  • 剑指offer计划5(查找算法中等版)---java

    剑指offer计划5(查找算法中等版)---java 1.1.题目1 剑指 Offer 04. 二维数组中的查找 1.2.解法 其实就是暴力解法的升级版,从最后一行开始判断,通过num当前的大小, 如 ...

  • 【剑指Offer】数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 解法1 最直接的思路,计算base的 ...

  • 【剑指Offer】链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 解法 基本思路是使用两个辅助指针p, q,让p先走k - 1步后,p, q两个指针再一起走 这样当p指针走到链表的末尾时,q指针刚好走到的就是倒数 ...

  • 【剑指Offer】反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 解法1 可以使用三个辅助指针pHead, last,next pHead记录当前节点,last记录上一个节点,next记录下一个节点 首先使用n ...

  • 剑指 Offer 14- I. 剪绳子

    我服了.动态规划杀我. 可以说一说解决动态规划的思路(只做了两三道就总结了emmm) 1.识别动态规划问题 --重叠子问题:大问题可以分为一个个子问题.和分治策略分割的子问题不同(分治问题的子问题是相 ...

  • 剑指offer

    03 数组中重复的数字 public int findRepeatNumber(int[] nums){ //排序后的数组,重复元素必然相邻 Arrays.sort(nums); //结果集 int ...

  • 剑指 Offer 30. 包含min函数的栈

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例:MinStack minStack = ne ...