Fork me on GitHub

Leetcode-129-求根到叶子节点数字之和

Leetcode-129-求根到叶子节点数字之和

题目描述

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。

例如,从根到叶子节点路径 1->2->3 代表数字 123。

计算从根到叶子节点生成的所有数字之和。

说明: 叶子节点是指没有子节点的节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
输入: [1,2,3]
1
/ \
2 3
输出: 25
解释:
从根到叶子节点路径 1->2 代表数字 12.
从根到叶子节点路径 1->3 代表数字 13.
因此,数字总和 = 12 + 13 = 25.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

输入: [4,9,0,5,1]
4
/ \
9 0
 / \
5 1
输出: 1026
解释:
从根到叶子节点路径 4->9->5 代表数字 495.
从根到叶子节点路径 4->9->1 代表数字 491.
从根到叶子节点路径 4->0 代表数字 40.
因此,数字总和 = 495 + 491 + 40 = 1026.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
阅读更多...

Netty-06-核心组件

Netty-06-核心组件

前言

  • 本文注重讲解Netty的核心组成

mark

1. Bootstrap、ServerBootstrap

  • Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,NettyBootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类

常见方法:

方法名称 方法介绍
public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) 该方法用于服务器端,用来设置两个EventLoop
public B group(EventLoopGroup group) 该方法用于客户端,用来设置一个EventLoop
public B channel(Class<? extends C> channelClass) 该方法用来设置一个服务器端的通道实现
public <T> B option(ChannelOption<T> option, T value) 用来给 ServerChannel 添加配置
public <T> ServerBootstrap childOption(ChannelOption<T> childOption, T value) 用来给接收到的通道添加配置
public ServerBootstrap childHandler(ChannelHandler childHandler) 该方法用来设置业务处理类(自定义的 handler)
public ChannelFuture bind(int inetPort) 该方法用于服务器端,用来设置占用的端口号
public ChannelFuture connect(String inetHost, int inetPort) 该方法用于客户端,用来连接服务器
阅读更多...

Netty-07-群聊系统实现

Netty-07-群聊系统实现

前言

实例要求

  • 编写一个Netty 群聊系统,实现客户端和服务端之间的数据简单通信(非阻塞)
  • 实现多人群聊
  • 服务器端: 可以检测用户上线,离线,并实现消息的转发
  • 客户端:通过channel 可以无阻塞发送消息给其他用户,同时可以接受其他用户发送来的消息(由)服务器转发得到
  • 目的 : 进一步理解Netty 非阻塞网络编程机制
阅读更多...

Netty-05-异步模型

Netty-05-异步模型

前言

  • 本文注重讲解Netty的异步模型任务的队列

1. 任务队列

mark

  • 任务队列由NioEventLoop 维护并且不断执行,当我们收到请求之后,在当前的 channel 中对应的 pipeline中的各个 Hanlder进行业务的处理和请求的过滤。
  • 当某些业务需要消费大量事件的时候,我们可以将这些任务提交到由 NioEventLoop 维护的 taskQueue 或者 ScheduleTaskQueue中, 让当前的 NioEventLoop 线程在空闲的时候去执行这些任务。
  • 下面将介绍提交任务的三种方式:
阅读更多...

Netty-04-线程模型

Netty-04-线程模型

前言

原生NIO存在的问题

  • NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 SelectorServerSocketChannelSocketChannelByteBuffer 等。
  • 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。
  • 开发工作量和难度都非常大:例如客户端面临断连重连网络闪断半包读写失败缓存网络拥塞和异常流的处理等等。
  • JDK NIO 的 Bug : 例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。直到 JDK 1.7 版本该问题仍旧存在,没有被根本解决。

Netty优点

  • NettyJDK自带的NIOAPI进行了封装,解决了上述问题。
    • 设计优雅:适用于各种传输类型的统一 API 阻塞和非阻塞 Socket;基于灵活且可扩展的事件模型,可以清晰地分离关注点;高度可定制的线程模型 - 单线程,一个或多个线程池.
    • 安全:完整的 SSL/TLSStartTLS 支持
    • 高性能、吞吐量更高:延迟更低;减少资源消耗;最小化不必要的内存复制。
阅读更多...

Leetcode-844-比较含退格的字符串

Leetcode-844-比较含退格的字符串

题目描述

给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
示例 1:

输入:S = "ab#c", T = "ad#c"
输出:true
解释:S 和 T 都会变成 “ac”。

示例 2:

输入:S = "ab##", T = "c#d#"
输出:true
解释:S 和 T 都会变成 “”。

示例 3:

输入:S = "a##c", T = "#a#c"
输出:true
解释:S 和 T 都会变成 “c”。

示例 4:

输入:S = "a#c", T = "b"
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。
阅读更多...
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信