• 力扣刷题日记/day7/6.30


    新手村

    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类

    和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

    因为java的字符串是不可以修改的,字符串拼接操作时,会生成临时的字符串副本,并在使用后销毁

     

    在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer

    StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)

    由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

    1. //创建一个StringBuilder对象
    2. StringBuilder sb = new StringBuilder(10);
    3. //创建一个StringBuffer对象
    4. StringBuffer sBuffer = new StringBuffer("菜鸟教程官网:");
    5. //将内容加到sBuffer字符串后
    6. sBbuffer.append("内容");
    7. //toString() 方法用于返回以一个字符串表示的 Number 对象值
    8. System.out.println(new Object().toString());

     常用方法:

    Java StringBuffer 和 StringBuilder 类 | 菜鸟教程 (runoob.com)

    Java toString() 方法 | 菜鸟教程 (runoob.com)

    二叉树的遍历

    深度优先遍历(DFS)

     解题思路:利用递归,深度优先遍历的思想

    考虑节点和节点的孩子节点

    若节点是叶子节点,在已经搜索到的路径的末尾添加该节点,得到一条从根节点到叶子节点的路径,将该路径直接加入返回变量即可

    若节点不是叶子节点,在已经搜索到路径的末尾添加该节点,并继续递归遍历该节点的每一个孩子节点

    遍历完整个二叉树,就得到了所有的从根节点到叶子节点的路径

    1. /**
    2. * Definition for a binary tree node.
    3. * public class TreeNode {
    4. * int val;
    5. * TreeNode left;
    6. * TreeNode right;
    7. * TreeNode() {}
    8. * TreeNode(int val) { this.val = val; }
    9. * TreeNode(int val, TreeNode left, TreeNode right) {
    10. * this.val = val;
    11. * this.left = left;
    12. * this.right = right;
    13. * }
    14. * }
    15. */
    16. class Solution {
    17. public List<String> binaryTreePaths(TreeNode root) {
    18. List<String> paths = new ArrayList<String>(); //定义一个返回变量paths
    19. constructPaths(root,"",paths); //递归执行深度优先搜索
    20. return paths;
    21. }
    22. public void constructPaths(TreeNode root,String path,List<String> paths){
    23. if(root != null){ //判断节点是否存在
    24. StringBuffer pathSB = new StringBuffer(path); //定义一个pathSB用来存储临时路径
    25. pathSB.append(String.valueOf(root.val)); //将节点值加入路径的末尾
    26. if(root.left == null && root.right == null){ //如果是叶子节点
    27. paths.add(pathSB.toString()); //将pathSB转换成String对象加入到返回变量paths中
    28. } else{
    29. pathSB.append("->"); //不是叶子节点,就在临时路径后加->
    30. constructPaths(root.left,pathSB.toString(),paths); //继续搜索其子节点
    31. constructPaths(root.right,pathSB.toString(),paths);
    32. }
    33. }
    34. }
    35. }

     

  • 相关阅读:
    Python图像处理丨三种实现图像形态学转化运算模式
    java计算机毕业设计ssm+vue红联小区果蔬销售网站-水果购物商城
    子进程信号继承;kill+raise+alarm+pause+信号发生接收和处理+信号屏蔽
    Redis (主从复制,哨兵模式,集群)概述及部署
    Windows10 Docker 安装教程
    VM虚拟机三种网络配置详解(桥接、NAT、仅主机)
    【Serilog】具有完全结构化事件的简单.NET日志记录
    C++内存管理:其六、静态allocator的实现
    企业研发如何破局提升效能?
    git基本使用
  • 原文地址:https://blog.csdn.net/cvpatient/article/details/125550437