
leetcode题目摘选
文章平均质量分 65
UsSam
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Leetcode】Remove Duplicates from Sorted List
解题思路:设置两个指针CurrList和NewList,初始化为同一头指针,CurrList不断向链表尾部扫描,如果当前节点的值不是重复值,就将该节点接到NewList尾部。原创 2014-03-11 19:09:26 · 889 阅读 · 0 评论 -
【Leetcode】Valid Palindrome
解题思路:设置首尾两个迭代器,从两头向中间遍历即可。只访问数字和字母(需要注意string里的字幕可能会有大小写区别,然而题目要求忽略大小写,因此比较之前需要将字母全部转换成小写或全部转换成大写)。原创 2014-03-20 18:51:34 · 1077 阅读 · 0 评论 -
【Leetcode】Climbing Stairs
解题思路:这是一道斐波拉契数列题。看到斐波那契数列就自然想到利用递归,然而在这里递归的效率非常低,荣誉计算的数量增长的非常快,直接导致出现TLE(Time Limit Exceeded)错误。这是因为在递归的时候许多值被重复计算了多次,根据《C和指针》上对斐波那契数列的介绍,在n=30时,Fibonacci(3)的值被计算了317811次。这是非常可怕的,因此我又采用迭代的思路写了一组代码。迭代的思路也比较简单,设定初始f(1)和f(2)的值,在每次迭代中将前两次的计算结果相加作为本次计算结果即可。下面给出原创 2014-03-20 15:07:56 · 941 阅读 · 0 评论 -
【Leetcode】Swap Nodes in Pairs
解题思路:本题较简单,做3次指针变换就可以完成一轮交换。原创 2014-03-20 18:04:07 · 1017 阅读 · 0 评论 -
【Leetcode】Valid Number
解题思路:这是一道考察细节的题,只要明确了规则就可以通过。leetcode上这道题的通过率只有10+%,我认为是由于规则不清晰引起的。我也是在不断的错误中明确了“有效”的具体规则定义以后才通过的。原创 2014-03-22 19:12:46 · 1146 阅读 · 0 评论 -
【Leetcode】Longest Common Prefix
解题思路:先找出最短长度的字符串,然后将所有字符串与最短长度的字符串做比较,遇到不同的字符就返回最短长度字符串的前一部分子串。原创 2014-03-24 16:36:16 · 887 阅读 · 0 评论 -
【Leetcode】String to Integer
解题思路:需要注意对越界进行判断的方法,这里采用的方法是判断已有数字串是否大于INT_MAX/10,如果是,那么加上现在字符中的单个数字以后必然越界;另一种越界的可能性是已有数字串等于INT_MAX/10,而待加的单个数字大于INT_MAX%10。还需要设置一个sign标志来进行正负输出。原创 2014-03-24 11:06:12 · 938 阅读 · 2 评论 -
【Leetcode】Add Binary
解题思路1:判断当前字符所表示的数字,产生输出和进位。缺点:程序比较复杂。解题思路2:首先判断a和b的长度,取其中更长的size作为加法运算的次数。在加法运算时,将每一个char转化为int型数字进行运算并记录进位。优点:程序简单。原创 2014-03-24 16:06:41 · 838 阅读 · 0 评论 -
【Leetcode】Roman to Integer
解题思路:我们首先来明确一下罗马数字与阿拉伯数字的换算规则:如果当前数字比前一个大,说明这一段的值应该是当前这个值减去上一个值,比如IV = 5 – 1;否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II=1+1。而罗马数字与阿拉伯数字对应变换是:I对应1,V对应5,X对应10,L对应50,C对应100,D对应500,M对应1000。因此,只需要从前往后读出字符,如果当前数字小于等于前一字符,则加上当前字符对应的数字;而当前数字更大时,减去前一个字符(要减去两倍,因为在前面扫原创 2014-03-24 19:08:27 · 1068 阅读 · 0 评论 -
【Leetcode】Count and Say
解题思路:可以用复杂度O(n^2)的方法来做,对每一个n,都递推的从1开始求string值,直到求到n为止。在求新的string值时,遍历上一个string,对其中重复出现的数字统计次数,并将次数与数字值插入到新的string中。原创 2014-03-24 19:46:50 · 1151 阅读 · 0 评论 -
【Leetcode】Convert Sorted Array to Binary Search Tree
解题思路:要建立平衡二叉查找树,只需要采用二分法,将每段数组的中间节点的值存入树节点即可,中间节点左右两段的数组的中间结点又作为该树节点的左右子树节点。原创 2014-03-25 16:11:21 · 897 阅读 · 0 评论 -
【Leetcode】Path Sum II
解题思路:用DFS算法进行搜索,搜索到叶子节点并且路径和等于设定值时,将路径存入容器。原创 2014-03-25 16:42:28 · 994 阅读 · 0 评论 -
【Leetcode】Valid Parentheses
解题思路1:用一个stack,将左括号压入栈内,遇到右括号时与栈顶元素作比较,如果相同则栈顶元素出栈并继续读下一个字符。解题思路2:将可能出现的左右括号分别放进两个字符串里去,左右括号的位置相互对应,设立一个栈来存储左括号,然后使用find函数找到右括号在右括号字符串中的位置n后,取出左括号字符串位置n的字符,与栈顶元素比较。原创 2014-03-25 11:06:56 · 888 阅读 · 0 评论 -
【Leetcode】Merge Sorted Array
解题思路1:设置一个数组C,依次取A的元素i与B的元素j比较,如果B[j]小,则将B[j]放入C,再取B的后一个元素与A[i]比较;反之,若A[i]更小,则将A[i]放入C,取A的下一个元素与B[j]比较。比较完成后,将C复制到数组A。该解法的时间复杂度为O(m+n),空间复杂度为O(m+n)解题思路2:将A和B的元素逐个从后往前比较,选出大的放在A数组尾部(从m+n-1位置处开始放),这样一来就不需要单独开辟存储空间来存储中间结果了。且不需要移位。时间复杂度O(m+n),空间复杂度O(1)原创 2014-03-25 18:59:47 · 957 阅读 · 0 评论 -
【Leetcode】Sum Root to Leaf Numbers
解题思路:用DFS算法搜索每条路经上的数,求出每条路经数字组合在一起的数,再将这些数相加。原创 2014-03-25 18:13:05 · 1073 阅读 · 0 评论 -
【Leetcode】Merge Two Sorted Lists
解题思路:设立一个头节点,作为返回表的开头,取l1和l2的元素比较,将较小值所在节点插入返回表的表尾,然后取出元素的表的指针往后移,直到比较完某个表的所有元素。原创 2014-03-26 10:38:31 · 849 阅读 · 0 评论 -
【Leetcode】Search Insert Position
解题思路:二分法。查找失败的话,比较当前下标位置处的值与目标值,如果目标值更大,则返回下标值加1,否则返回下标值。原创 2014-03-26 10:59:13 · 960 阅读 · 0 评论 -
【Leetcode】Unique Paths
解题思路:这道题是一道典型的深度优先搜索题,可以按照深度优先的思路得到正确的解。然而,由于深度优先在递归的过程中有很多的重复计算,因此在输入规模较小时能通过,而输入规模 变大时就超时了,为了降低计算量,可以设立一个二维数组存储已经计算过的值,如果已经计算过,那就不再进行递归计算,而是直接将数组中的值取出来用。代码1是深度优先搜索,超时。代码2是建立了备忘录数组的深度优先搜索,顺利通过!原创 2014-03-26 16:18:34 · 1041 阅读 · 0 评论 -
【Leetcode】Remove Nth Node From End of List
解题思路1:采用两个指针,第一个指针滑动到最末节点,统计出节点数量count,第二个指针从头指针滑动count-n-1步到待删除节点的前一个节点的位置。将该节点的next指针指向待删除节点的下一个节点,将目标节点删除。需要注意如果n等于count说明被删除的节点是头节点,这时只需要返回头节点的next域可以了。该思路的缺陷是需要走两次才能将待删除节点删除。解题思路2将提供一种走一遍就将节点删除的方法。解题思路2:建立一个位于头节点之前的节点(该节点的next域指向头节点),设立两个指向该节点的指针,让第一原创 2014-03-20 16:19:19 · 824 阅读 · 0 评论 -
【Leetcode】Valid Sudoku
解题思路:分别对横向、纵向、小格子遍历即可。设一个set来表示已出现过的数字,并判断当前访问的数字是否在集合中(即判断是否已经出现过)。原创 2014-03-20 11:24:43 · 1052 阅读 · 0 评论 -
【Leetcode】Search in Rotated Sorted Array II
解题思路:该题与Search in Rotated Sorted Array的主要区别在于需要考虑A[low]与A[mid]相等、A[mid]与A[high]相等以及A[low]A[mid]A[high]三者相等的情形。若A[low]与A[mid]相等而A[mid]与A[high]不等,则搜索右边序列;若A[mid]与A[high]相等而A[low]与A[mid]不等,则搜索左边序列;若A[low]A[mid]A[high]三者相等,则在最坏情况下需要对两边的序列进行搜索。原创 2014-03-07 22:07:16 · 806 阅读 · 0 评论 -
【Leetcode】Plus One
解题思路:要给原有容器表示的数加1,主要需要处理的就是进位的问题。由于是加1,因此只有在当前数字为9的时候采进位。如果在数组的第0个元素上还需要进位,那么就需要在该元素前面增加一个数字1。原创 2014-03-11 16:42:29 · 797 阅读 · 0 评论 -
【Leetcode】Balanced Binary Tree
解题思路1(下面给出两种代码实现,代码1和代码2):采用递归的方法,对每一层的节点进行遍历,从叶子节点开始回溯,并从下往上判断每一层的各个是否满足平衡树的条件,并得到以该节点为根节点的左右子树的深度,进而得到该节点的深度以便于上层的判决。解题思路2:由于是深度是非负的,因此可以通过-1来表示不平衡。从而避免了返回值不一致的问题(如第一种思路,为了让返回值为bool型并记录深度,不得不采取了传引用的函数调用方式)。原创 2014-03-12 19:20:24 · 978 阅读 · 0 评论 -
【Leetcode】Same Tree
解题思路:对两棵树进行遍历即可,这里采用先序遍历的方法。原创 2014-03-12 11:28:00 · 903 阅读 · 0 评论 -
【Leetcode】Search in Rotated Sorted Array
解题思路:数组的查找一般可以使用二分查找法,但是这道题里的数组已经被旋转了,因此需要在二分查找的基础上加入一些限制条件:我们可以考虑一个升序排列的整形序列A[n],带查找目标为target,设low=0,high=n-1,该序列被旋转以后,如果从按照二分查找的方法从中间选取一个值A[mid](mid=(low+high)/2),那么被分出的两个序列中有且仅有一个是升序排列的。在未被旋转的升序序列中,被分出的两个序列都是升序排列且右边序列的值总比左边序列的值大,只需要通过target<A[mid]或targe原创 2014-03-07 12:39:06 · 785 阅读 · 0 评论 -
【Leetcode】Remove Element
解题思路:设置两个指针pa,pb,pa指针从0开始依次向n-1滑动,当pa指向的元素不是待删除的元素时,将pa指向的元素赋给pb指向的元素,同时pb向前滑动。原创 2014-03-11 15:58:34 · 633 阅读 · 0 评论 -
【Leetcode】Symmetric Tree
解题思路:采用先序遍历的思路对根节点的两颗子树进行遍历,在遍历的时候需要注意,左子树的遍历过程中,先访左子树的左儿子,然后访问左子树的右儿子;右子树的遍历过程中,先访问右子树的右儿子,再访问右子树的左儿子。即镜像的对左右两颗子树进行比较。原创 2014-03-12 15:04:29 · 812 阅读 · 0 评论 -
【Leetcode】Minimum Depth of Binary Tree
解题思路1:设置一个变量存储当前记录下的最小深度,采用先序遍历的方法访问树的每一个节点,设置一个变量表示当前节点所在的层次,如果一个节点没有子节点,那么就比较该节点的深度与当前的最小深度,选择两者之中较小的作为当前的最小深度。解题思路2:另一种思路是,当节点为空时,判断其是否有兄弟节点,如果没有,那么令该节点的深度为0,如果有兄弟节点,令该节点的深度为正无穷(INT_MAX)。这样一来,在上一层节点进行选择时,将选择该节点的兄弟节点的深度作为子节点的深度。原创 2014-03-13 20:28:38 · 742 阅读 · 0 评论 -
【Leetcode】Path Sum
解题思路:如果节点为空,返回false。如果节点不为空,则在路径和上加上当前节点的值,并判断是否是叶子节点,如果是叶子节点则判断当前的路径和是否等于条件所给的值。如果不是叶子节点,则递归的访问节点的左儿子和右儿子并对两者的结果取或。原创 2014-03-15 19:34:32 · 1209 阅读 · 0 评论 -
【Leetcode】Maximum Depth of Binary Tree
解题思路:当节点为空时,返回0,否则返回左右儿子中最深的深度值。原创 2014-03-15 18:36:36 · 841 阅读 · 0 评论 -
【Leetcode】Word Ladder
解题思路:采用BFS搜索。每个节点采用pair表示,每个pair的第一个元素是字符串本身,第二个元素是所在层次。原创 2014-03-16 16:10:43 · 1813 阅读 · 0 评论 -
【Leetcode】Pascal's Triangle II
题目:Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1].Note:Could you optimize your algorithm to use only O(k) extra space?解题思路:原创 2014-03-28 09:16:45 · 1224 阅读 · 0 评论 -
【Leetcode】Best Time to Buy and Sell Stock
题目:Say you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one and sell one share of th原创 2014-03-27 15:31:48 · 834 阅读 · 0 评论 -
【Leetcode】Pascal's Triangle
题目:Given numRows, generate the first numRows of Pascal's triangle.For example, given numRows = 5,Return[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]解题思路:下一行的值等于上一行相同位置原创 2014-03-27 22:09:27 · 1227 阅读 · 0 评论 -
【Leetcode】Reverse Integer
题目:Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321click to show spoilers.Have you thought about this?Here are some good questions to ask原创 2014-03-27 18:36:18 · 1040 阅读 · 0 评论 -
【Leetcode】Palindrome Number
题目:Determine whether an integer is a palindrome. Do this without extra space.click to show spoilers.Some hints:Could negative integers be palindromes? (ie, -1)If you are thinking of原创 2014-03-27 20:03:51 · 990 阅读 · 0 评论 -
【Leetcode】Word Ladder II
解题思路: 这道题居然被网友标注为难度1,而另一道Word Ladder被标注为难度3。事实上在做的过程中大家都会发现如果Word Ladder的难度是3的话,那Word Ladder的难度至少为4。解题的关键在于选取适当的数据结构,题目要求输出所有路径,不像Word Ladder里一样只需要输出最少路径节点数。因此不是在该层找到第一个可达节点就能返回,而是要访问所有可达节点,并且记录下节点之间的关系。一个节点可能经过多个下一层节点到达目的节点,也就是说一个节点可能对应多个下一层节点,同时,原创 2014-03-17 21:48:04 · 1384 阅读 · 0 评论 -
【Leetcode】Two Sum
题目:Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they add up to the原创 2014-03-27 21:52:02 · 978 阅读 · 0 评论