leetcode刷题总结101-150
101. 对称二叉树
描述:
思路: 递归。考虑左子树的最右节点和右子树的最左节点对称。
102. 二叉树的层序遍历
描述:
思路:递归。维护一个List<List<Node>> (List.get(迭代次数).add(xxxx))
103. 二叉树的锯齿形层次遍历
描述:
思路:递归。先右再左。
104. 二叉树的最大深度
描述:
思路: 递归
105. 从前序与中序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树
107. 二叉树的层次遍历 II
描述:
思路:递归。
108. 将有序数组转换为二叉搜索树
描述:
思路: 因为是平衡二叉树,所以根节点先求出(index=low+(high-low)/2),然后分治递归。
109. 有序链表转换二叉搜索树
描述:
思路:快慢指针求出index。
110. 平衡二叉树
描述:
思路:递归
111. 二叉树的最小深度
描述:
思路:递归+判断(当前深度大于已经知道的最小,直接跳出。)
112. 路径总和
描述:
思路:回溯。
113. 路径总和 II
描述:
思路;回溯。
114. 二叉树展开为链表
描述;
思路:把左子树接到根节点的右边,原右子树接到左子树的最右边。递归。
115. 不同的子序列
描述:
输入:S = "rabbbit", T = "rabbit"
输出:3
思路:动态规划。dp[i][j]表示s[0-i]表示t[]0-j[的次数
116. 填充每个节点的下一个右侧节点指针
描述:
思路:递归。每次递归把当前的右节点指向当前的next的左节点。
117. 填充每个节点的下一个右侧节点指针 II
描述:
思路:递归。每次把当前的左节点指向右节点(若右节点为空,指向当前节点的next的做左节点,若为空,为右节点。)
118. 杨辉三角
119. 杨辉三角 II
120. 三角形最小路径和
思路:动态规划
121. 买卖股票的最佳时机
描述:
思路:单调栈。动态规划.dp[i][j][k]第i天j为交易次数,k为此时的股票(保持。卖出)的状态。此题k的个数=1
122. 买卖股票的最佳时机 II
描述:
思路:贪心。
123. 买卖股票的最佳时机 III
描述:
思路:动态规划。
124. 二叉树中的最大路径和
描述:
思路:某一结点的最大路径和=此节点的value+左节点的最大贡献值+右节点的最大贡献值。
125. 验证回文串
描述:
思路:双指针
126. 单词接龙 II
描述:
思路:构件图,遍历(DFSBFS)。
127. 单词接龙
描述:
思路:构件图,BFS找最短路径
128. 最长连续序列
描述:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
思路:第一遍先存到hashset。然后看num-1是否存在sets,然后开始num+1 +2找
129. 求根到叶子节点数字之和
描述:
思路:递归
130. 被围绕的区域
描述:
思路:四个边保持,内部遍历(遇到O,判断上下左右是否有x)
131. 分割回文串
描述:
思路:回溯。
132. 分割回文串 II
描述:
输入: "aab"
输出: 1
解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
思路:动态规划。dp[i]表示0-i分隔的次数。然后对每次情况判断是否为回文。定义状态转移。
133. 克隆图
描述:
思路: 遍历即可。
134. 加油站
描述:
思路:cost[i]>gas[i]跳過,找起始點。
135. 分发糖果
描述:
思路:从左边和从右边分别开始遍历。然后取最高。
136. 只出现一次的数字
描述:
输入: [2,2,1]
输出: 1
思路: 全部异或。
137. 只出现一次的数字 II
描述:
输入: [2,2,3,2]
输出: 3
思路:hashmap。或者: 通过once_seen;twice_seen来记录出现1次和2次。
138. 复制带随机指针的链表
描述:
思路:相当于把每个先插入其源节点的后面。7,7,13,13.。。。然后再拆分。
139. 单词拆分
描述:
输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。
思路:回溯+剪枝。动态规划
140. 单词拆分 II
描述:
输入:
s = "catsanddog"
wordDict = ["cat", "cats", "and", "sand", "dog"]
输出:
[
"cats and dog",
"cat sand dog"
]
思路:回溯+剪枝
141. 环形链表
描述:
思路:hasseen(set)
142. 环形链表 II
描述:
思路:双指针+hasseen
143. 重排链表
描述:
给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.
思路:快慢指针确定中间节点,然后分隔,将后面的逆序。然后拼接。
144. 二叉树的前序遍历
145. 二叉树的后序遍历
思路:递归。
146. LRU缓存机制
思路:hashmap+linkedList. (Linkedhashmap)
147. 对链表进行插入排序
思路:指针遍历插入即可。
148. 排序链表
思路;二分。
149. 直线上最多的点数
描述:
思路:N^2的复杂度。计算斜率是否相等,
150. 逆波兰表达式求值
思路:栈