力扣
飞飞想去踢球
此人很懒
展开
-
2.两数相加
Description:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -...转载 2019-04-15 22:04:59 · 56 阅读 · 0 评论 -
3.无重复字符串的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所...转载 2019-04-16 21:17:42 · 50 阅读 · 0 评论 -
13.罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12...转载 2019-04-22 12:02:06 · 63 阅读 · 0 评论 -
101.对称二叉树
给定一个二叉树,检查它是否是镜像对称的。解法1 递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass So...转载 2019-05-02 10:31:18 · 69 阅读 · 0 评论 -
104.二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。解法1 递归 深度优先分析对于每一棵二叉树来说,其最大深度为左子树的最大深度 和 右子树的最大深度 中的最大值当节点为空 返回深度0递归调用 得到左子树深度...转载 2019-05-02 11:54:09 · 109 阅读 · 0 评论 -
15.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]分析排序双指针避免重复统计...转载 2019-04-23 15:17:33 · 96 阅读 · 0 评论 -
16.最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).分析排序双指针设置初始值避免重复统计...转载 2019-04-23 16:02:41 · 72 阅读 · 0 评论 -
107.二叉树的层次遍历 ii
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],解法1 递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val...转载 2019-05-02 21:43:51 · 92 阅读 · 0 评论 -
17.电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。解法1:暴力求解class Solut...转载 2019-04-23 17:13:24 · 65 阅读 · 0 评论 -
5.最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”class Solution: def longestPalindrome(self, s: str) -> str: ...转载 2019-04-18 23:15:27 · 61 阅读 · 0 评论 -
18.四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[[...转载 2019-04-23 20:14:38 · 60 阅读 · 0 评论 -
108.将有序数组转换成二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:解法1 递归递归函数传入 列表 左索引 右索引每次将 中间节点作为根节点 递归左孩子 递归右孩子# Definition for a binary tree node.# class TreeNode:# def...转载 2019-05-03 20:23:50 · 76 阅读 · 0 评论 -
19.删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?分析解法1将链表中的数按顺序存入一个列表找到要删除节点的索引遍历到该节点 ...转载 2019-04-24 10:07:12 · 100 阅读 · 0 评论 -
20.有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)...转载 2019-04-24 11:00:51 · 57 阅读 · 0 评论 -
110.平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。解法1 递归常规类似前序遍历每一次递归调用时 考察当前节点 的左右子树高度差是否不超过1当前节点的左子树 的左右子树高度差是否不超过1当前节点的右子树 的左右子树高度差是否不超过1# Definition for a binary t...转载 2019-05-04 11:15:17 · 152 阅读 · 0 评论 -
111.二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。解法1 递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left ...转载 2019-05-04 11:56:58 · 87 阅读 · 0 评论 -
112.路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。解法1 递归终止条件:当前节点为叶子结点 判断 节点val是否 == 更新的sum递归:左子树是否有指定路径?右子树是否有指定路径?返回 是否有指定路径?# Definition for a binary tree node....转载 2019-05-04 12:36:16 · 51 阅读 · 0 评论 -
118.杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。动态规划i行j列i > 2 且 0 < j < i 时 result[i][j] = result[i - 1][j - 1] + result[i - 1][j]class Solution: def generate(self, numRows: int) -> List[List[...转载 2019-05-04 12:51:40 · 60 阅读 · 0 评论 -
119.杨辉三角II
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。进阶:你可以优化你的算法到 O(k) 空间复杂度吗?解 利用对称性class Solution: def getRow(self, rowIndex: int) -> List[int]: if rowIndex == 0: return [1] ...转载 2019-05-04 13:52:48 · 98 阅读 · 0 评论 -
6.Z字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:...转载 2019-04-19 20:09:05 · 96 阅读 · 0 评论 -
7.整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2的31次方, 2的31次方 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。import mat...转载 2019-04-19 20:21:25 · 61 阅读 · 0 评论 -
8.字符串转换整数(atoi)
请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽...转载 2019-04-20 10:29:30 · 64 阅读 · 0 评论 -
9.回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。分析判断是否...转载 2019-04-20 10:36:53 · 76 阅读 · 0 评论 -
11.盛最多水的容器
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色...转载 2019-04-20 11:28:49 · 266 阅读 · 0 评论 -
121.买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。解双指针 i ji 指向当前遍历过的价格中最小价格的索引j 指向当前遍历价格的索引i必须小于jclass Solution: def maxProfit(self, pric...转载 2019-05-05 14:21:48 · 70 阅读 · 0 评论 -
122.买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。解投资原理最小价格买入 最大价格卖出没有买入时明天跌 今天不动明天涨 今天买入买入但还没卖出时明天跌 今天卖出明天涨 今天不动class...转载 2019-05-05 14:38:56 · 67 阅读 · 0 评论 -
125.验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。解1遍历s 若字符 == 数字或字母 添加到列表列表转换为字符串 并将大写转化为小写切片 验证是否为回文串class Solution: def isPalindrome(self, s: str) -> bool: ...转载 2019-05-05 15:08:47 · 65 阅读 · 0 评论 -
21.合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4分析双指针注意保存头节点分类讨论# Definition for singly-linked list.# class ListNode:# ...转载 2019-04-25 09:40:08 · 55 阅读 · 0 评论 -
22.括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]分析解法1深度优先搜索 Depth-First-Search左右括号各n个当还有左括号时,可添加左括号当没有用过的右括号数量大于左括号时,可添加右括号...转载 2019-04-25 10:29:43 · 61 阅读 · 0 评论 -
136.只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?解1排序 (快排)遍历偶数索引 前一个等于后一个 否则为只出现一次的数字但时间复杂度为O(nlogn)class Solution: def singleNumber(self, nums: List...转载 2019-05-05 15:46:09 · 85 阅读 · 0 评论 -
141.环形链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。进阶:你能用 O(1)(即,常量)内存解决此问题吗?解1集合 x in set 时间复杂度为O(1)但空间复杂度为O(n)# Definition for singly-linked list.# ...转载 2019-05-05 16:18:53 · 79 阅读 · 0 评论 -
155.最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。class MinStack: def __init__(self): """ initialize your d...转载 2019-05-05 16:34:49 · 70 阅读 · 0 评论 -
24.两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.分析区分 头部情况 中间情况 尾部情况区分 偶数 奇数判断是否为空链表# Definition for singly-linked list.# cla...转载 2019-04-25 11:00:58 · 55 阅读 · 0 评论 -
26.删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...转载 2019-04-25 11:15:13 · 53 阅读 · 0 评论 -
160.相交链表
编写一个程序,找到两个单链表相交的起始节点。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。解双指针设A 为链表A的非公共部分B 为链表B的非公共部分C 为公共部分 (可能为空)则 A + C + B == B + C + A# ...转载 2019-05-05 17:32:11 · 67 阅读 · 0 评论 -
27.移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为...转载 2019-04-30 10:20:02 · 75 阅读 · 0 评论 -
28.实现strStr()
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba...转载 2019-04-30 11:16:09 · 261 阅读 · 0 评论 -
35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0分析二分查找...转载 2019-04-30 11:26:14 · 55 阅读 · 0 评论 -
38.报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1112112111112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一个正整...转载 2019-04-30 12:09:37 · 60 阅读 · 0 评论 -
53.最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解法1 动态规划 O(n)sum[i] 表示以索引i结尾的子数组中的最大...转载 2019-04-30 15:17:34 · 59 阅读 · 0 评论