LeetCode
文章平均质量分 68
诚实的小小乐
这个作者很懒,什么都没留下…
展开
-
LeetCode--Unique Paths
题目:如下图,从start位置到finish位置(网格m*n),每步只能右移一格或左移一格,问有多少种不同的路径解题思路:考虑用递归算法,因为要移动到(i,j)位置,必须先移动到(i-1,j)或者(i,j-1),所以有f(i,j)=f(i-1,j)+f(i,j-1)代码(python):class Solution(object): def uniquePaths(原创 2017-10-30 14:58:16 · 199 阅读 · 0 评论 -
LeetCode--Set matrix zeros
题目:给定一个数组matrix(m*n),若某个位置值为0,则将该行该列的值都设为0思路:最直接的想法是,直接对数组进行遍历,遇到0则将该行该列都置0.但这样会导致重复和混乱。再想到重新建立一个矩阵,新矩阵的值来记录该位置是原值还是0,但比较浪费空间O(m*n)。考虑空间后,新建立一个O(m+n)的向量,用来存储对应行和列是否置零O(m+n)。再考虑用首行和首列来存储对应行原创 2017-10-30 13:49:49 · 545 阅读 · 0 评论 -
LeetCode--Two Sum
题目给定一个数组sums,以及一个目标target,假设数组中一定存在唯一一组数(两个)的和为target,输出这两个数的索引解题思路:1、该题目最容易想到的方法是对sums进行遍历,把所有可能的组数进行遍历(n2复杂度),在leetcode中超时错误。之后去掉之前遍历的重复计算,i从0到len(sums)遍历sums,j遍历索引从i到len(sums)的sums子序列(n2/2的原创 2017-09-06 16:39:27 · 336 阅读 · 0 评论 -
LeetCode--Find All Numbers Disappeared in an Array(找到数组中未出现的数字)
题目:给定一个包含n个数字到数组nums,其中有的数字出现多次,有的数字出现一次。且所有的数字都在1到n之间。求该数组中未出现1到n之间到哪些数字。要求:不能使用多余到空间,且只能用O(n)的复杂度。不考虑返回的数组所占空间。解题思路:考虑到要有O(n)的复杂度,则联系到用哈希存储方式,使用python中的字典。代码(python):class Solution(object)原创 2017-10-25 22:13:26 · 212 阅读 · 0 评论 -
LeetCode--Integer to Roman
题目:将数字num转为罗马数字格式思路:先给出所有的罗马数字表示组合,如dict所示dict_integer = {1000:'M',900:'CM',500:'D',400:'CD',100:'C',90:'XC',50:'L',40:'XL',10:'X',9:'IX',5:'V',4:'IV',1:'I'}。再使用贪心算法,每次都从上列组合中选出可选择的最大数,将该表示加入输出字原创 2017-10-25 20:42:07 · 153 阅读 · 0 评论 -
LeetCode--Roman to Integer
题目:将罗马数字转为整数形式。解题思路:首先需要知道罗马数字的表示方式及读取方式。表示方式如字典所示dict_roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}。读取方式从左到右依次读取,若当前的数字大于上一个数字,则加上这个数字并减去上一个数字的两倍,否则直接加上这个数字代码(python):class S原创 2017-10-25 20:23:41 · 146 阅读 · 0 评论 -
leetcode面试频率
ID 问题 频率 数据结构 算法 1 Two Sum 5 array、set sort、Two Pointers 8 String to Integer (atoi) 5 string Math 15 3Sum 5 array Two Pointers转载 2017-09-24 11:22:46 · 537 阅读 · 0 评论 -
LeetCode Valid Palindrome(验证回文字符串)
题目:给定一个字符串,判断其中包含数字和字母的部分是否是回文字符串(忽略大小写),即判断该字符串是不是正向和反向读取的结果一致。解题思路:本题的解题方法比较暴力直接,先遍历一遍字符串,将字符串中的所有非数字和字母的部分删除,并将所有的大写字母转为小写字母,再设置两个指针,分别从首尾开始读取字符串,判断首尾指针读取的字符是否一致,一致则首尾指针同时向中间移动一个单位继续读取,否则中断循环原创 2017-09-24 11:06:00 · 802 阅读 · 0 评论 -
LeetCode--Valid Parentheses
题目:Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{}" are all val原创 2017-09-22 13:10:26 · 220 阅读 · 0 评论 -
LeetCode--String to Integer (atoi)字符串转数字
题目:给定字符串,将其转为int型并输出。像c++中的atoi函数一样解题思路:本题比较简单,需要考虑的是各种字符串转为int型可能出现的各种特殊情况。如“123 456”的输出结果为123; “+0 123”输出结果为0; “+-1”的输出结果为0; 当数字超过2147483647 或者小于-2147483648时,分别返回这两个值即可。本题只要注意到所有可能出现的特原创 2017-09-21 16:22:11 · 240 阅读 · 0 评论 -
LeetCode--word ladder(python)
题目:给定一个开始字符串beginWord 如 ‘hit’,结束字符串endWord如‘cog’,字符串字典wordlist 如["hot","dot","dog","lot","log","cog"]。从开始字符串开始,要求每次只能改变一个字符,求经过wordlist到达endWord的最短路径解题思路:考虑到最短路径,用djistra算法,从开始字符串出发,找到该字符串改变一个原创 2017-09-19 19:15:26 · 1310 阅读 · 0 评论 -
LeetCode--Climbing Stairs(爬楼梯)
题目:有n个台阶,每次可以爬1到2个台阶,求有多少种不同爬楼梯的方式?解题思路:1、首先考虑用递归来解决问题,因为对于n个台阶来说,必须先完成n-2个台阶或者n-1个台阶,因此可以通过不断递归来将问题化简,最终得解。递归公式如下:f(n)=f(n-1)+f(n-2),若n=1,f(n)=1,若n=2,f(n)=2。通过该递归公式可解。该思路比较简单,但有多次重复的运算,因此用pyt原创 2017-09-10 16:23:48 · 307 阅读 · 0 评论 -
LeetCode--Validate Binary Search Tree(二叉搜索树)
题目:给定一颗二叉树,判断其是不是二叉搜索树,即判断是否满足左解题思路:利用二叉搜索树的性质,直接对该二叉树进行中序遍历,判断其结果是否是有序的,若是,则返回True,否则返回False。考验是否了解二叉搜索树,以及输出二叉树中序遍历结果的递归函数。代码(python):# Definition for a binary tree node.# class TreeNod原创 2017-09-08 21:23:42 · 205 阅读 · 0 评论 -
Leetcoed--Binary Tree Inorder Traversal (二叉搜索树--中序遍历)
题目:给定一个二叉搜索树,求它的中序遍历结果思路:使用递归,给定一颗树,先遍历左子树,再读根,再遍历右子树。遍历左子树的方式可以再调用这个函数本身,经过多次递归调用,可以完成对给定树的中序遍历代码:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):原创 2017-08-23 14:49:20 · 298 阅读 · 0 评论 -
Leetcode--jump game (最大跳)
问题:给定非负整数数组nums,每个整数代表在当前位置的最大步数,初始为止都是index=0的位置,判断是否能够到达数组的最后一个位置。如:A = [2,3,1,1,4],返回true.A = [3,2,1,0,4]返回false解题思路:考虑用贪心算法,每一步只考虑当前可以到达的最大位置。因为当前可以到达的最大位置表示之前的位置都可以到达,可以用谈心算法。对数组进行一次遍历,存储原创 2017-08-21 11:07:05 · 582 阅读 · 0 评论 -
Leetcode--Longest Palindromic Substring(最长回文子序列)
题目:给定字符串s,找出s中的最长回文子序列(即最长的中心对称子序列),如“ababd”,返回“aba”或“bab”; “abbd”返回“bb”,“a”返回“a”解题思路:1、考虑用动归的方式来解题,因为后面的计算会用到前面计算的结果。如“fabcbad”,首先知道“bcb”是回文子序列,再知道“abcba”也是回文子序列,故每次只需判断前期回文子序列的两边字符是否相同,相同则增加两边字符原创 2017-08-19 10:50:56 · 605 阅读 · 0 评论 -
LeetCode--Pow(x,n)二分法
题目:计算Pow(x,n),即计算x的n次方,其中x是float型,n是整型解题思路:看到这个题目,首先考虑到不能直接计算x*x*x...*x,肯定会超时,所以考虑用二分法来计算。从n的复杂度转为logn的复杂度。计算思路为要计算Pow(x,n),可以用Pow(x,n/2)*Pow(x,n/2)替代,依次进行递归。需要注意的是要考虑n的奇偶性。代码如下(python):clas原创 2017-09-20 16:09:00 · 365 阅读 · 0 评论 -
LeetCode--Unique Paths II
题目:接着上一道题目Unique Paths,考虑到障碍问题。在matrix(m*n)矩阵中有障碍的地方设为1,否则为0。计算到达右下角的不同路径有多少种。解题思路:考虑使用动态规划的方式解题,同上个题目一样,要到达(i,j),则要先到达(i-1,j)或者(i,j-1)。另外若(i,j)位置为障碍物的话,到达(i,j)的路径个数为0.代码(python):class Solut原创 2017-10-30 17:53:30 · 214 阅读 · 0 评论 -
LeetCode--Word Break(分词)Python
题目:给定一个字符串s,和一个词典Dict。判断该字符串s是否可以完全拆分为Dict中的单词。解题思路:考虑使用递归的方法。用output来存储从0到当前位置的字符串是否可以完全拆分为Dict中的单词。判断当前字符串是否可以完全拆分的问题,可以化解为从之前所有可以完全拆分的位置到当前位置的字符串是否在给定词典中,若在,则当前位置可以完全拆分,否则不行。该方法需要用一个列表来存储当前字符原创 2017-11-29 14:20:50 · 678 阅读 · 0 评论 -
LeetCode--Largest Number(最大数字)Python
题目:给定一个包含非负数的列表,重新排列,使其最终组合之后的整数最大。例如:给定列表[3, 30, 34, 5, 9], 返回的最大整数是9534330解题思路:相当于对列表中的数字进行排序。使用冒泡排序、快排等都可以。重要的是怎么决定两个整数的先后顺序,如3、30和34:正确的顺序是34330,正确的判断思路是根据组合后的数字哪个大进行排序。代码(Python):class原创 2017-11-29 15:13:09 · 1288 阅读 · 0 评论 -
LeetCode--Longest Consecutive Sequence(最长连续序列)Python
题目:给定一个乱序的整数数组,找到最长连续元素序列的长度。比如给定数组[100, 4, 200, 1, 3, 2],其中最长的连续数组为[1,2,3,4],所以返回的最大长度为4。解题思路:因为考虑要降低复杂度,所以先将数据遍历一遍,存储到字典中。再从字典中不断拿出当前的整数相邻两个整数是否在字典中,若存在,则弹出这两个数,并将count+2,若当前整数相邻的两个数都不在字典中,则判断原创 2017-11-30 12:07:36 · 1154 阅读 · 0 评论 -
LeetCode--Single Number(单独数字)Python
题目:给定一个数组,这个数组所有的数字都是成对出现的,只有一个数字是单独的,要求找出这个单独的数字。解题思路:考虑用字典,遍历数组,将数组内容作为key存入字典,之后每一次存入字典前判断该数字是否存在于字典中,若存在,则弹出,否则存入。经过这个循环,只有单独的那个数字有存入没有弹出,故Dict中剩余的数字则是那个单独数字。代码(Python):class Solution(ob原创 2017-11-30 13:06:08 · 1201 阅读 · 0 评论 -
LeetCode--Merge Two Binary Trees(合并两个二叉树)Python
题目:给定两个二叉树,合并。合并的方式为:若两个二叉树都有值,则返回两个值的和,否则返回有值的那个二叉树。例如:解题思路:直接用递归顺序读取并存储即可。代码(Python):# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):#原创 2017-12-08 11:38:38 · 1195 阅读 · 0 评论 -
LeetCode--Majority Element(出现次数最多的元素)Python
题目:给定一个数组,长度为n,求出出现次数>=下取整(n/2)的元素。解题思路:考虑使用哈希表存储各个元素出现的次数,只用遍历一遍数组即可,复杂度为O(n)代码(Python):class Solution(object): def majorityElement(self, nums): """ :type nums: List[int原创 2017-12-08 14:31:17 · 482 阅读 · 0 评论 -
LeetCode--Contains Duplicate (python)
题目:判断数组中是否包含成对出现的数字。若存在,返回True,否则返回False解题思路:比较简单,直接用python中的字典。哈希表。代码(Python):class Solution(object): def containsDuplicate(self, nums): """ :type nums: List[int]原创 2017-12-01 16:13:54 · 367 阅读 · 0 评论 -
LeetCode--Reverse Linked List 反转链表(Python)
题目:给定一个链表,把这个链表反转过来。解题思路:比较简单,对链表遍历,需保存上一个指针和下一个指针。在遍历过程中理清三者关系,注意不要互相覆盖即可。直接上代码。代码(Python):# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):#原创 2017-12-01 15:15:55 · 2013 阅读 · 0 评论 -
LeetCode--Intersection of Two Linked Lists (两个链表的交点)Python
题目:给定两个链表,求这两个链表的交点。若没有交点,则返回空。样例如下(返回交点c1):解题思路:思路1:暴力思路,n方复杂度。对两个链表分别进行遍历,找到相同的节点即可O(n*m),空间复杂度为O(1)。思路2:使用哈希表,即python中的字典。先遍历一个链表,并将链表内容放入字典。再遍历另外一个链表,看遍历到的位置是否存在于字典中,存在则返回当前结点。若遍历结束仍不存原创 2017-12-01 15:51:32 · 1801 阅读 · 0 评论 -
LeetCode--Longest Increasing Subsequence (最长递增子序列)Python
题目:给定一串数组,返回其中的最长递增子序列的长度。例如:给定数组[10, 9, 2, 5, 3, 7, 101, 18],则其最长递增子序列为[2, 3, 7, 101],返回长度4.解题思路:使用动归。用Dp[i]来保存从0-i的数组的最长递增子序列的长度。如上数组Dp[0]=1,Dp[1]=1,Dp[2]=1,Dp[3]=2,Dp[4]=2。。。计算Dp[i]的值可以对Dp[i]原创 2017-12-11 10:32:17 · 3396 阅读 · 0 评论 -
LeetCode--Move Zeroes(移动0元素)Python
题目:给定一个数组。将数组中的0移动到数组末尾,其他元素保持原有的顺序,直接对原数组进行操作,不用返回解题思路:对数组遍历,使用flag来标记当前数组内容为0的位置,若遍历到nums[i]的值为非0元素,则将其移动到之前为0的元素位置,并将遍历到的位置赋0.代码(Python):class Solution(object): def moveZeroes(self, n原创 2017-12-11 10:57:56 · 710 阅读 · 0 评论 -
LeetCode--Factorial Trailing Zeroes(阶乘的末位0数)
题目:给定数字n,返回n!对应数字中的末尾0的个数。解题思路:判断末尾0的个数,直接查看之前的数字里头包含5的个数或5的倍数的个数,数字5,包含一个5,数字10包含两个(5,10),15包含三个(5,10,15)。。。25包含六个(5,10,15,20,5*5)代码(Python):class Solution(object): def trailingZeroes(s原创 2017-12-11 16:11:41 · 167 阅读 · 0 评论 -
LeetCode--Count Primes(素数个数)Python
题目:计算n以内的素数个数。解题思路:1、首先考虑直接判断n以内的每个数是否为素数。再对结果进行求和。判断某个数是否为素数的方法,之间判断该数能否整除从2到sqrt(n)的数字。若能则是素数,否则不是素数。复杂度为n*sqrt(n)。但在LeetCode会超时。代码(Python):class Solution(object): def countPrimes(self原创 2017-12-03 16:35:24 · 2473 阅读 · 0 评论 -
LeetCode--Invert Binary Tree (反转二叉树)Python
题目:给定一个二叉树,将其对称反转。样例如下。解题思路:可以发现只要将二叉树从根节点出发,把每一个节点的左子树和右子树对称交换,即可得到整个二叉树的对称交换结果。故使用递归进行反转代码(Python):# Definition for a binary tree node.# class TreeNode(object):# def __init__(self,原创 2017-12-12 10:47:53 · 1220 阅读 · 0 评论 -
LeetCode--Delete Node in a Linked List(删除链表中的节点)Python
题目:给定一个链表中间的一个节点,已知这个节点不是链表的尾部。删除这个给定的节点。解题思路:直接把当前节点的值替换为下个节点的值。并把当前节点的next替换为下个节点的next。代码(Python):# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x)原创 2017-12-04 11:09:30 · 501 阅读 · 0 评论 -
LeetCode--Reverse String 反转字符串(Python)
题目:反转字符串代码:class Solution(object): def reverseString(self, s): """ :type s: str :rtype: str """ return s[::-1]原创 2017-12-04 12:30:27 · 739 阅读 · 0 评论 -
LeetCode--Find the Duplicate Number(查找重复数字)Python
题目:给定一个n+1个长度的数组,包含从1到n的数字,其中一定包含一个重复的数字,返回这个重复的数字。只能使用常量大小的额外空间解题思路:利用数组的下标,将检索过的数字对应下标位置的内容存储为原数字的负数。这样既能保存原数字的大小,又能存储到该数字是否存在的信息。代码:class Solution(object): def findDuplicate(self, num原创 2017-12-04 12:53:18 · 1253 阅读 · 0 评论 -
LeetCode--Missing Number(查找丢失的整数)Python
题目:给定一个长度为n的数组,包含从0-n的整数,找到其中丢失的整数。如给定[0,1,3]返回2。要求O(n)复杂度,且只能使用常量个额外空间。解题思路:用负数来表示该数对用位置已被检索。即对数组进行遍历,将下标为当前整数的数字取负。这样既能保存原数组的值,也可以保存该数是否被包含的信息。代码(Python):class Solution(object): def mi原创 2017-12-04 14:22:41 · 854 阅读 · 0 评论 -
LeetCode--First Unique Character in a String(字符串中第一个不重复的字母)Python
题目:给定一个字符串,找出这个字符串中第一个单独出现的字母下标。解题思路:通过Python中的字典来存储每个字符出现的次数。字典读取数据可以降低复杂度。代码(Python):class Solution(object): def firstUniqChar(self, s): """ :type s: str :rtype原创 2017-12-04 15:01:54 · 1063 阅读 · 0 评论 -
LeetCode--Add Two Numbers(求两个链表的和)Python
题目:给定两个链表,从头结点开始,计算两个链表的和。样例如下:Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0 -> 8解题思路:使用递归来读取链表内容。代码(Python):# Definition for singly-linked list.# class ListNode(object):# def原创 2017-11-24 12:57:08 · 421 阅读 · 0 评论 -
LeetCode--Minimum Path Sum (最小路径和)Python
题目:给定一个m*n的数组,数组中包含非负数,从该数组左上角到该数组右下角的最小路径和。(只能向下或者向右移动)。数组格式如下:[[1,3,1],[1,5,1],[4,2,1]]解题思路:考虑使用递归或者动态规划来解题:楼主刚开始用递归实现了一遍,发现超时了,改为动态规划后AC。故只解释动归代码:从左上角开始对数组进行遍历,将grid(数组)内容存储为走到当前位置的最短原创 2017-11-17 11:19:20 · 1762 阅读 · 0 评论 -
LeetCode--Rotate Image(旋转图像)Python
题目:给定一个n*n的数组,将其顺时针旋转90度,要求直接对原数组进行处理,不要使用多余的空间或者新建数组旋转。输入输出样例:Given input matrix = [ [1,2,3], [4,5,6], [7,8,9]],rotate the input matrix in-place such that it becomes:[ [7,4,1], [原创 2017-11-17 14:01:00 · 956 阅读 · 0 评论