
LeetCode题解
xiaoyi357
这个作者很懒,什么都没留下…
展开
-
LeetCode 412题Fizz Buzz 题解
原题链接:点击打开链接 首先想到的方法如下:import java.util.ArrayList;import java.util.List;public class Solution { public List fizzBuzz(int n) { List result = new ArrayList(); for(int i=1; i<n+1原创 2017-03-02 09:29:54 · 314 阅读 · 0 评论 -
LeetCode 3. Longest Substring Without Repeating Characters 题解——Java
题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/#/description题目要求:给定一个字符串,找出字符串中没有重复字符的子串的最大长度。思路:对于字符串中的每一个字符,找出以每一个字符为最后元素的,符合条件的子串的长度,将各个子串的长度值保存起来。遍历各个子串的长度值,原创 2017-03-13 19:59:01 · 374 阅读 · 2 评论 -
LeetCode 111. Minimum Depth of Binary Tree 题解——Java
题目链接:https://leetcode.com/problems/minimum-depth-of-binary-tree/#/description思路:二叉树的最小深度 = min {左子树的最小深度,右子树的做小深度 } + 1 ;使用递归求解。需要注意的是,求二叉树的最小深度比求二叉树的最大深度稍微复杂一点,有一种情况需要考虑:当根节点只有左子树或者只有右子树时...假设某二原创 2017-03-13 18:20:45 · 356 阅读 · 0 评论 -
LeetCode 236. Lowest Common Ancestor of a Binary Tree 题解
题目链接:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/?tab=DescriptionJava代码如下:public class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p,原创 2017-03-12 21:39:59 · 258 阅读 · 0 评论 -
LeetCode 98. Validate Binary Search Tree 题解
题目链接:https://leetcode.com/problems/validate-binary-search-tree/?tab=Description思路:二叉搜索树的中序遍历应该是递增的序列,可以通过判断中序遍历的序列是否是严格增长的,来判断二叉树是否是二叉搜索树。Java代码如下:public class Solution { private List nodeList原创 2017-03-12 22:19:43 · 280 阅读 · 0 评论 -
LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 题解
题目链接:https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/?tab=Description原创 2017-03-12 20:59:59 · 340 阅读 · 0 评论 -
LeetCode 136. Single Number 题解—— Java
题目链接:https://leetcode.com/problems/single-number/#/description题目要求:给定一个数组,其中只有一个数字只出现一次,其他数字都出现两次,找出这个只出现一次的数字。思路:将所有数字进行异或操作,最终得到的结果就是只出现一次的数。因为异或“相同为0,不同为1”,那么一个数的和它本身异或,就会变为0。举例如下:对于数字 3,7 ,原创 2017-03-21 20:43:55 · 452 阅读 · 0 评论 -
LeetCode 27. Remove Element 题解 —— Java
题目链接:https://leetcode.com/problems/remove-element/#/description原创 2017-03-21 20:24:56 · 490 阅读 · 0 评论 -
LeetCode 102. Binary Tree Level Order Traversal 题解
题目链接:https://leetcode.com/problems/binary-tree-level-order-traversal/?tab=Description题目要求:按层遍历二叉树,并要把每一层的元素放在一个链表中。思路:如果不要求用嵌套链表的形式存储元素,而只是按层次把元素输出,那可以直接使用队列实现,还比较简单。但是根据本题的要求,我们不得不记录下每一层的起始位置。我的做原创 2017-03-11 21:14:49 · 213 阅读 · 0 评论 -
LeetCode 434. Number of Segments in a String 题解——Java
题目链接:https://leetcode.com/problems/number-of-segments-in-a-string/#/description题目要求:以空格为分隔符,计算字符串的段数。分析:此题初看简单,但是有些细节却需要注意(1) 对于“”的输入情况,需要单独处理一下,因为split方法会返回1而不是正确的结果0。(2)可能有多个空格相连的情况,比如输入“, ,原创 2017-03-13 20:34:07 · 689 阅读 · 0 评论 -
LeetCode 110. Balanced Binary Tree 题解 - Java
题目链接:https://leetcode.com/problems/balanced-binary-tree/#/description题目要求:判断一棵树是否是平衡二叉树 最初尝试使用 | 二叉树的最大深度-二叉树的最小深度 | 对于上图所示的二叉树,树的最大深度是5,最小深度是3,5-3>1,但是这棵树是一颗平衡二叉树。因此上述方法不正确。原创 2017-03-13 16:56:04 · 473 阅读 · 0 评论 -
442. Find All Duplicates in an Array 题解
题意:给定一组整数,共n个,这组数字的值均不超过n。在这组数字中,有些数字出现了两次而其他数字只出现了一次,要求找出该组数字中所有出现两次的数。并且不能开辟额外的空间,且时间复杂度应为O(n)。思路:题目不允许开辟额外空间,第一反应是能不能使用位运算/异或来解决该问题,仔细思考后发现似乎行不通。实际上该题目使用的是“借助数组下标记录一些信息”的思想,题目中“这组数字的值均不超过n”也印证了该想法。...原创 2018-06-08 17:11:31 · 431 阅读 · 0 评论 -
Leetcode 292. Nim Game 题解
题目链接为:点击打开链接题目要求:Nim 游戏规则如下,我和朋友一起玩拿石头的游戏,每人每次可以拿1-3块石头,拿到最后一块石头的人获胜。在游戏中,我是先拿石头的那个人。给定石头总数,判断我是否可以获胜。思路:根据题目要求,“我和朋友都很聪明”,意味着我和朋友任何一个人输掉游戏,都是因为在这局游戏中TA无论怎样拿都不可能获胜。也就是说给定石头总数,在了解套路的情况下,输赢是确定的。原创 2017-10-26 18:17:04 · 508 阅读 · 0 评论 -
LeetCode 226. Invert Binary Tree 题解 —— Java
题目链接:https://leetcode.com/problems/invert-binary-tree/#/description题目要求:反转二叉树——左子树换成右子树,右子树换成左子树思路:首先将根节点的左右子树交换,然后递归的将左右子树再进行反转。Java代码:public class Solution { public TreeNode invertTr原创 2017-03-16 12:33:03 · 417 阅读 · 0 评论 -
LeetCode 100. Same Tree 题解 —— Java
题目链接:https://leetcode.com/problems/same-tree/#/description题目要求:判断两个二叉树是否完全一样思路:递归实现,首先判断根节点是否一样,然后递归判断两个二叉树的左子树和右子树是否完全一样。Java代码如下: public boolean isSameTree(TreeNode p, TreeNode q) {原创 2017-03-16 12:25:20 · 304 阅读 · 0 评论 -
LeetCode 96. Unique Binary Search Trees 题解 —— Java
题目链接:https://leetcode.com/problems/unique-binary-search-trees/#/description题目要求:给定正整数n,计算能构成的BST数量 (该BST存储的值为0~n)思路:动态规划,分别计算出当n = 1~n时,能够构成的BST的数量。f(1) = 1 // 当只有一个节点时能构成的BST的数量f(2) = 以1为根节点能原创 2017-03-15 21:02:57 · 317 阅读 · 0 评论 -
LeetCode 392. Is Subsequence 题解——Java
题目链接:https://leetcode.com/problems/is-subsequence/#/description题目要求:判断字符串s是不是字符串t的子序列方法一:首先想到的方法是,使用两个队列分别报错两个字符串中的各个字符,依次比较队首元素,若两个队列的队首元素相同,则表示到目前为止,s的前x个字符可以匹配为t的子序列;如果两个队列的队首元素不相同,则将t队列的原创 2017-03-14 22:30:23 · 878 阅读 · 0 评论 -
LeetCode 22. Generate Parentheses 题解 —— Java
题目链接:https://leetcode.com/problems/generate-parentheses/#/description题目要求:给定正整数n,求n对括号所有正确配对的组合。思路:采用分支限界和回溯算法,考虑一颗二叉树,根节点为(,向左右只添加左括号,向右走只添加有括号。在遍历该二叉树的时候,采用分支限界和回溯方法,只获得满足条件的括号对。Java代码如下:原创 2017-03-15 19:40:02 · 707 阅读 · 0 评论 -
LeetCode 222. Count Complete Tree Nodes 题解——Java
题目链接:https://leetcode.com/problems/count-complete-tree-nodes/#/description题目要求:计算完全二叉树的节点个数思路:首先想到的是直接的递归,二叉树的节点个数 = 左子树的节点个数 + 右子树的节点个数 + 1Java 代码如下:public class Solution { // 二叉树的节点数 =原创 2017-03-15 09:14:24 · 1172 阅读 · 1 评论 -
LeetCode 108. Convert Sorted Array to Binary Search Tree 题解
题目链接:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/?tab=Description本题的要求是:将升序的数组转化为高度平衡的二叉搜索树。思路:使用递归求解,数组中间的元素作为root,左侧元素用来构造root的左子树,右侧元素用来构造root的右子树。如此递归下去。。。对于生成的B原创 2017-03-11 20:03:14 · 282 阅读 · 0 评论 -
LeetCode 104. Maximum Depth of Binary Tree 题解
题目链接:https://leetcode.com/problems/maximum-depth-of-binary-tree/?tab=Description思路:二叉树的最大深度= max{ 左子树的最大深度,右子树的最大深度} + 1Java代码如下:public class Solution { // 二叉树的最大深度等于max {左子树的最大深度,右子树的最大深度}原创 2017-03-11 19:37:01 · 261 阅读 · 0 评论 -
LeetCode 404. Sum of Left Leaves 题解
题目链接:点击打开链接思路:使用递归。Java参考代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { v原创 2017-03-04 21:48:17 · 232 阅读 · 0 评论 -
LeetCode 11. Container With Most Water —— Java
题目链接:https://leetcode.com/problems/container-with-most-water/#/description题目要求:在n条不同高度的柱子中选择两个柱子,(每两个相邻柱子之间等间隔)使其构成的容器装水最多。思路:从左右两侧向中间靠拢(因为如果选择左右两侧的两个柱子,宽度已经最大,要想扩大容积...其实是面积...只能考虑增大高度)。首先选取的两个柱子原创 2017-03-17 23:22:05 · 373 阅读 · 0 评论 -
LeetCode 387. First Unique Character in a String Add to List 题解
题目链接:点击打开链接思路:关键点就是用一个容量是26的数组来记录每个字母出现的次数。下标0-25分别映射到a-z。Java参考代码如下:public class Solution { public int firstUniqChar(String s) { // 使用一个容量为26的数组,使用下标0-25来映射a-z int[] count原创 2017-03-04 20:57:23 · 211 阅读 · 0 评论 -
LeetCode 380. Insert Delete GetRandom O(1) 题解
题目链接:点击打开链接 解题思路:使用数组可以在O(1)时间复杂度内实现查询(在这里就是:getRandom方法首先产生一个随机下标,然后通过下标访问数据,O(1)); 但是正常来说数组不能在O(1)时间复杂度内完成插入删除,此处的处理是, 对于插入:此题没有限制在指定位置插入数据,如果在数组的原创 2017-03-04 16:57:06 · 675 阅读 · 0 评论 -
LeetCode 155. Min Stack 题解
题目链接:点击打开链接 思路:本题的push、pop、top都可以直接使用java自带的stack实现。关键在于如何实现getMin()方法。 使用两个栈,第一个栈正常保存全部数据,第二个栈只保存数据中的“不升序”序列,这其中的奥妙需要自行体会一下.....Java 参考代码如下:import java.util.Stack;publi原创 2017-03-04 20:13:05 · 268 阅读 · 0 评论 -
LeetCode 268. Missing Number 题解
题目链接:点击打开链接 题目要求算法的时间复杂度为O(N),空间复杂度为O(1). 解题思路:输入序列为0...n(乱序)缺少其中一个数,所以数组的长度为n。举例来说,对于array[0],经过一次替换可以将它换到正确的位置;但是新替换过来的array[0]可能未必是0,继续将新的array[0]替换到正确位置....如此继续。最终最大的数n会被换到缺少的数字对应的位置,其他数组都被替换到原创 2017-03-08 12:00:55 · 316 阅读 · 0 评论 -
LeetCode 190. Reverse Bits 题解
题目链接:点击打开链接 先给出最先想到的解法,java代码如下:public class Solution { public int reverseBits(int n) { // 将整数转为二进制 String binaryString = Integer.toBinaryString(n); // 二进制字符串反转原创 2017-03-02 11:09:44 · 772 阅读 · 0 评论 -
LeetCode 26. Remove Duplicates from Sorted Array 题解——Java
题目链接:https://leetcode.com/problems/remove-duplicates-from-sorted-array/#/description题目要求:对于一个已排好序的数组,返回去掉其中的重复元素之后的数组长度。思路:使用一个指针指示下一个不同的元素应该处于的正确位置。Java代码如下:public class Solution { pu原创 2017-03-20 19:30:55 · 362 阅读 · 0 评论 -
LeetCode 169. Majority Element 题解 ——Java
题目链接:https://leetcode.com/problems/majority-element/#/solutions题目要求:找出数组中的主元素方法一:首先最容易想到的方法是,将数组排序,最中间的数就是主元素。该方法的时间复杂度即为排序的时间复杂度,为O(n logn)Java代码如下:public class Solution { public int原创 2017-03-20 19:55:47 · 331 阅读 · 0 评论 -
LeetCode 101. Symmetric Tree 递归解法
题目链接:点击打开链接s 思路:使用递归求解,首先需要判断根节点是否为null,若是,直接返回true;若不是,需要对root的左子树和右子树进行比较,是对称树的条件是:root.left和root.right相同;且root.left.left和root.right.right相同 且 root.left.right和root.right.left相同。 Java代码如下:pub原创 2017-03-11 19:14:46 · 301 阅读 · 0 评论 -
LeetCode 94. Binary Tree Inorder Traversal 题解
题目链接:点击打开链接 本题为非递归实现中序遍历。Java 参考代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val原创 2017-03-11 18:47:43 · 283 阅读 · 0 评论 -
LeetCode 21. Merge Two Sorted Lists 题解 —— Java
题目链接:https://leetcode.com/problems/merge-two-sorted-lists/#/description题目要求:将两个有序列表合并为一个有序列表思路:循环比较两个链表的头元素,较小的那个加入新链表,然后指针后移;直到其中一个链表为空之后,将另一个链表加入到新链表中。Java代码如下:public class Solution {原创 2017-03-20 22:23:06 · 458 阅读 · 0 评论 -
LeetCode 203. Remove Linked List Elements 题解 —— Java
题目链接:https://leetcode.com/problems/remove-linked-list-elements/#/description题目要求:删除链表中的值为指定值的所有节点思路:该题的关键是 在head之前增加一个辅助节点,然后使用两个指针,一个previous,一个current,分别用来记录当前处理节点的前一个节点和当前处理节点。Java代码如下:原创 2017-03-20 21:54:52 · 442 阅读 · 0 评论 -
LeetCode 160. Intersection of Two Linked Lists 题解 —— Java
题目链接:https://leetcode.com/problems/intersection-of-two-linked-lists/#/description题目要求:找出两个链表的交叉点,若两链表没有交叉点,返回null。思路:(1)首先遍历两个链表,计算出两个链表的长度 O(N)(2)对于较长的那个链表,让该链表的指针先走几步——所走的步数为两链表的长度差(3)再让两链原创 2017-03-20 21:10:01 · 406 阅读 · 0 评论 -
LeetCode 70. Climbing Stairs 题解 —— Java
题目链接:https://leetcode.com/problems/climbing-stairs/#/description题目要求:实质上是求斐波那契数列的值。f(1)=1, f(2)=2, f(3) = f(2)+f(1)...求f(n)思路:采用求斐波那契数列的迭代算法。Java代码如下:public class Solution { public i原创 2017-03-20 20:51:11 · 550 阅读 · 0 评论 -
LeetCode 171. Excel Sheet Column Number 题解 —— Java
题目链接:https://leetcode.com/problems/excel-sheet-column-number/#/description题目要求:实质上是26机制的数转化为十进制。思路:举例来说,BAA=((B*26 + A) * 26 ) +AJava代码如下:public class Solution { // 26进制的计算 public int原创 2017-03-20 20:27:24 · 474 阅读 · 0 评论 -
LeetCode 121. Best Time to Buy and Sell Stock 题解 —— Java
题目链接:https://leetcode.com/problems/best-time-to-buy-and-sell-stock/#/description思路:对于数组中的每一个价格,记录当前位置的最低价格,然后计算出若当前售出,能获得的最大利润是多少。比较所有可能的利润,取最大值即为最终的最大利润。Java代码如下:public class Solution {原创 2017-03-20 20:11:21 · 592 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树 题解
class Solution { // 先将右子树转换为累加树;并记录右子树的累加和rightSum; // 然后处理根节点,根节点的值 = 根节点值 + rightSum; // 然后转化左子树 public TreeNode convertBST(TreeNode root) { convert(root, 0); return...原创 2018-07-15 11:08:04 · 737 阅读 · 0 评论