栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历

目录

力扣394.字符串解码

力扣946.验证栈序列

力扣429.N叉树的层序遍历

力扣103.二叉树的锯齿形层序遍历


力扣394.字符串解码

看见括号,由内而外,转向用栈解决。使用两个栈处理,一个用String,一个用Integer

遇到数字:提取数字放入到数字栈中

遇到'[':把后面的字符串提取出来,放入字符串栈中

遇到']':解析,然后放到字符串栈,栈顶的字符串后面,(因为,我们获取的是左括号里面的字符串,和数字,也就是我们知道是几个左括号里面的值,然后我们和前一个进行简单的拼接即可。

遇到单独的字符:提取出来这个字符,直接放在字符串栈顶的字符串后面。

class Solution {public static String decodeString(String s) {Stack<String>a=new Stack<>();Stack<Integer>b=new Stack<>();char[]ss=s.toCharArray();//最终的存储结果的字符串int i=0;while(i<ss.length){StringBuffer ret=new StringBuffer();int Mathret=0;
//3[a2[ce]] acece        ec//思路,存储[括号,直到遇上右括号,然后我们需要做什么呢? 我们出来的顺序是ecec,或许可以考虑再存储一次?// 左[上面的,如果是非空,我全给他排出来,再塞进去,再排出来?,//或者是否可以使用StringBuffer添加char,再来一个reverse是否更好呢。if(ss[i]>='0'&&ss[i]<='9') {while (ss[i] >= '0' && ss[i] <= '9') {Mathret = Mathret * 10 + (ss[i] - '0');i++;}b.add(Mathret);}else  if(ss[i]=='['){i++;while (i<ss.length&&ss[i] >= 'a' && ss[i] <= 'z') {ret.append(ss[i]);i++;}a.add(ret.toString());}else  if(ss[i]==']'){String tem=a.pop();StringBuffer p=new StringBuffer();int count=b.pop();while(count>0){p.append(tem);count--;}if(!a.isEmpty()){StringBuffer pc=new StringBuffer(a.pop());pc.append(p);a.add(pc.toString());}else{a.add("");StringBuffer pc=new StringBuffer(a.pop());pc.append(p);a.add(pc.toString());}i++;}//此时单独遇到字符情况else{while (i<ss.length&&ss[i] >= 'a' && ss[i] <= 'z') {ret.append(ss[i]);i++;}if(!a.isEmpty()){StringBuffer pc=new StringBuffer(a.pop());pc.append(ret);a.add(pc.toString());}else{a.add("");StringBuffer pc=new StringBuffer(a.pop());pc.append(ret);a.add(pc.toString());}}}return a.pop();
}
}

力扣946.验证栈序列

class Solution {public boolean validateStackSequences(int[] pushed, int[] popped) {Stack<Integer>a=new Stack<>();//j表示pop的指针,i表示push的指针int j=0;//首先这个题考虑过程中,先考虑肯定是是否两个字符串长度不同。for(int i=0;i<popped.length;i++){a.add(pushed[i]);while(!a.isEmpty()&&j<pushed.length&&popped[j]==a.peek()){a.pop();j++;}}return a.size()==0;}
}

力扣429.N叉树的层序遍历

这里我遇到一个问题,就是我的ret不断添加的过程中,发现把ret2添加进去之后,ret2被我改变,但是ret也改变,我问了半天,没结果,然后我去问gpt得到了这个原因

在你的代码中,`ret2` 是一个 `List<Integer>` 类型的局部变量,用于存储当前层的所有节点值。当你将 `ret2` 添加到 `ret` 中时,实际上是将 `ret2` 的引用添加到了 `ret` 列表中。这意味着 `ret` 列表中的元素仍然指向同一个 `ret2` 对象。

因此,如果你在后续的循环中继续修改 `ret2`,那么 `ret` 列表中的对应元素也会受到影响,因为它们引用的是同一个对象。


        result.add(new ArrayList<>(levelValues));  // 创建一个新的列表对象
    }

    return result;
}

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/class Solution {public  List<List<Integer>> levelOrder(Node root) {Queue<Node>q=new LinkedList<>();List<List<Integer>>ret=new ArrayList<>();if(root==null)return ret;q.add(root);while(!q.isEmpty()){int sz=q.size();List<Integer> ret2 = new ArrayList<>();while(sz!=0) {Node  head = q.poll();//暂时存储节点ret2.add(head.val);for (int i = 0; i < head.children.size(); i++) {if(head.children!=null){q.add(head.children.get(i));}   }sz--;}      ret.add(new ArrayList<>(ret2));      }return ret;}
}

力扣103.二叉树的锯齿形层序遍历

这个就是判断适当时机给他来个逆转就好,不难

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>>ret=new ArrayList<>();if(root==null)return ret;int count=0;Queue<TreeNode>q=new LinkedList<>();q.add(root);while(!q.isEmpty()){List<Integer> ret2 = new ArrayList<>();int sz=q.size();while(sz!=0){TreeNode t=q.poll();ret2.add(t.val);//注意我们思考一下,怎么出来才正确if(t.left!=null)q.add(t.left);if(t.right!=null)q.add(t.right);sz--;}if(count%2==1){List<Integer> ret3 = new ArrayList<>();for(int i=ret2.size()-1;i>=0;i--){ret3.add(ret2.get(i));}ret.add(new ArrayList<>(ret3));}else{ret.add(new ArrayList<>(ret2));}count++;}return ret;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

408代码类复习--图类

图类 Author&#xff1a;Joanh_Lan Personal Blog Links&#xff1a;Joanh_LanのCSDN博客 备注&#xff1a; 个人复习版本 不保证完全正确&#xff0c;理性参考&#xff08;不背锅i哦&#xff09; &#xff08;&#xff1a;&#xff08;&#xff1a;&#xff08;&#xff…

Maven的安装——给Idea配置Maven

一、什么是Maven? Maven是一个开源的项目管理工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目生命周期管理。 二、准备环境 maven安装之前&#xff0c;我们要先安装jdk&#xff0c;确保你已经安装了jdk环境。可以通过【win】【r】打开任务管理器&#xff0c;输入…

linux 常用命令指南(存储分区、存储挂载、docker迁移)

前言&#xff1a;由于目前机器存储空间不够&#xff0c;所以‘斥巨资’加了一块2T的机械硬盘&#xff0c;下面是对linux扩容的一系列操作&#xff0c;包含了磁盘空间的创建、删除&#xff1b;存储挂载&#xff1b;docker迁移&#xff1b;anaconda3迁移等。 一、存储分区 1.1 …

OpenCvSharp Demo 饱和度、明度、对比度、锐化、阴影、高光、色温实现滤镜效果

目录 效果 风景-天空滤镜 人像—酷感冷艳滤镜 美食—鲜美滤镜 美食—巧克力滤镜 项目 代码 参考 下载 效果 风景-天空滤镜 人像—酷感冷艳滤镜 美食—鲜美滤镜 美食—巧克力滤镜 项目 代码 using OpenCvSharp; using System; using System.Diagnostics; using Syst…

Easyexcel(4-模板文件)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09; 文件导出 获取 resources 目录下的文件&#xff0c;使用 withTemplate 获…

迁移学习理论与应用

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习技术&#xff0c;旨在将一个任务&#xff08;源任务&#xff09;上学到的知识迁移到另一个相关但不完全相同的任务&#xff08;目标任务&#xff09;上&#xff0c;从而提高目标任务的学习效果。这种方法的核心…

近期两篇NeRF/3DGS-based SLAM方案赏析:TS-SLAM and MBA-SLAM

原文链接&#xff1a;近期两篇NeRF/3DGS-based SLAM方案赏析&#xff1a;TS-SLAM and MBA-SLAM paper1&#xff1a;TS-SLAM: 基于轨迹平滑约束优化的神经辐射场SLAM方法 导读 本文提出了TS-SLAM&#xff0c;一种改进的基于神经辐射场&#xff08;NeRF&#xff09;的SLAM方法…

游戏引擎学习第20天

视频参考:https://www.bilibili.com/video/BV1VkBCYmExt 解释 off-by-one 错误 从演讲者的视角&#xff1a;对代码问题的剖析与修复过程 问题的起因 演讲者提到&#xff0c;他可能无意中在代码中造成了一个错误&#xff0c;这与“调试时间标记索引”有关。他发现了一个逻辑问题…

《鸿蒙系统:开启智能新时代的璀璨之星》

一、鸿蒙系统&#xff1a;崛起之路 鸿蒙系统的发展历程堪称一部科技创新的传奇。2012 年&#xff0c;华为前瞻性地启动鸿蒙系统研发项目&#xff0c;彼时或许很少有人能预见到它未来的辉煌。2019 年&#xff0c;鸿蒙系统首个开发者预览版的发布&#xff0c;如同夜空中的一颗璀…

SQL注入--DNSlog外带注入--理论

什么是DNSlog? DNS的作用是将域名解析为IP 而DNSlog就是存储在DNS服务器上的域名信息&#xff0c;它记录着用户对域名访问信息。可以理解为DNS服务器上的日志文件。 多级域名 比如blog.csdn.net&#xff0c;以点为分隔&#xff0c;从右向左依次是顶级域名、二级域名、三级域…

python: Serialize and Deserialize complex JSON using jsonpickle

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎 # Serialize and Deserialize complex JSON in Python # 描述&#xff1a;pip install jsonpickle https://github.com/jsonpi…

基于图的去中心化社会推荐过滤器

目录 原论文研究背景与研究意义概述论文所提出算法的主要贡献GDSRec算法原理与流程问题定义去中心化图&#xff08;decentralized graph&#xff09;所提出方法(三种并行建模)用户建模&#xff08;user modelling&#xff09; 模版代码讲解main.py顶层文件&#xff1a;用于集成…

计算机的错误计算(一百六十三)

摘要 四个算式“sin(0.00024/2)^2”、“(1-cos(0.00024))/2”、“(1-sqrt(1-sin(0.00024)^2))/2”以及“sin(0.00024)^2/(22*sqrt(1-sin(0.00024)^2))”是等价的。但是&#xff0c;在 MATLAB 中计算它们&#xff0c;输出不完全一致&#xff1a;中间两个算式的输出中含有错误数…

递归算法专题一>Pow(x, n)

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public double myPow(double x, int n) {return n < 0 ? 1.0 / pow(x,-n) : pow(x,n); }private double pow(double x, int n){if(n 0) return 1.0;double tmp pow(x,n / 2);return n % 2 0 ? tmp * tmp : tmp …

论文阅读 SimpleNet: A Simple Network for Image Anomaly Detection and Localization

SimpleNet: A Simple Network for Image Anomaly Detection and Localization 摘要&#xff1a; 该论文提出了一个简单且应用友好的网络&#xff08;称为 SimpleNet&#xff09;来检测和定位异常。SimpleNet 由四个组件组成&#xff1a;&#xff08;1&#xff09;一个预先训练的…

实战分享:如何在HP-UX上高效扩容Oracle 12c RAC ASM磁盘

文章目录 Oracle 12c RAC ASM磁盘扩容 for HP-UX一、扩容原因二、扩容前信息三、扩容详细步骤3.1 存储划分LUN&#xff0c;映射到Oracle 12c RAC相关主机组3.2 扫描查看磁盘3.3 检查两节点间的磁盘盘符是否一致3.4 以一个节点为准同步磁盘盘符3.5 更改磁盘属主、权限3.6 查看AS…

如何使用 Matlab 制作 GrabCAD 体素打印切片

本教程适用于已经对 Matlab 和 J750 操作有所了解的用户。 它不是有关如何使用 Matlab 软件或 PolyJet 打印机的全面课程。 Stratasys 为您提供以下内容&#xff1a; 第 1 步&#xff1a;什么是体素&#xff1f; 就像 2D 数字图像由像素组成一样&#xff0c;您可以将 3D 数字形…

CNN—LeNet:从0开始神经网络学习,实战MNIST和CIFAR10~

文章目录 前言一、CNN与LeNet介绍二、LeNet组成及其名词解释2.1 输入2.2 卷积层2.3池化层2.4 全连接层2.5 总结 三、MNIST实战3.1 构建神经网络3.2 数据处理3.3 &#xff08;模板&#xff09;设置优化器&#xff0c;损失函数&#xff0c;使用gpu(如果是N卡有cuda核心)&#xff…

SpringBoot集成Dynamo(3)集成远程dynamo

按照推荐的AWS IAM SSO模式&#xff0c;以文件存储凭证的方式&#xff0c;看下代码是如何访问的。 pom依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"…

半导体、晶体管、集成电路、芯片、CPU、单片机、单片机最小系统、单片机开发板-概念串联辨析

下面概念定义从小到大串联&#xff1a; 半导体&#xff08;semiconductor&#xff09;&#xff1a; 是一类常温下导电性能介于导体与绝缘体之间的材料&#xff0c;这种材料的导电性可以随着外部环境比如电压、温度、光照的变换而改变。常见的半导体材料有硅、锗、砷化镓等。 晶…