leetcode

LeetCode All in One 题目讲解汇总(持续更新中...)

本秂侑毒 提交于 2020-01-31 21:19:45
Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" represents: dir subdir1 subdir2 file.ext The directory dir contains an empty sub-directory subdir1 and a sub-directory subdir2 containing a file file.ext . The string "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext" represents: dir subdir1 file1.ext subsubdir1 subdir2 subsubdir2 file2.ext The directory dir contains two sub-directories subdir1 and subdir2 . subdir1 contains a file file1.ext and an empty second-level sub

Leetcode 48.旋转图像(Rotate Image)

牧云@^-^@ 提交于 2020-01-31 14:38:47
Leetcode 48.旋转图像 1 题目描述( Leetcode题目链接 )   给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。   说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例: 给定 matrix = [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] , 原地旋转输入矩阵,使其变为 : [ [ 7 , 4 , 1 ] , [ 8 , 5 , 2 ] , [ 9 , 6 , 3 ] ] 示例2: 给定 matrix = [ [ 5 , 1 , 9 , 11 ] , [ 2 , 4 , 8 , 10 ] , [ 13 , 3 , 6 , 7 ] , [ 15 , 14 , 12 , 16 ] ] , 原地旋转输入矩阵,使其变为 : [ [ 15 , 13 , 2 , 5 ] , [ 14 , 3 , 4 , 1 ] , [ 12 , 6 , 8 , 9 ] , [ 16 , 7 , 10 , 11 ] ] 2 题解   题目要求,不能使用额外矩阵,需要原地修改。根据顺时针旋转的现象我们可以一圈一圈地旋转,例如对示例2的最外层一圈,像13、1、10和12对应的位置是有关系的,找到这样的关系就行了。 class Solution : def

【leetcode练习1】 两数相加—C 、python实现

我的梦境 提交于 2020-01-31 05:18:55
编程低能儿,兴起做leetcode,不知道能坚持几天,就当复习下C和学习下python。 题目 :给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 思路: 题目给的比较友好,数字按照逆序来存储,做加法的时候只需要遍历这个链表即可,C已经学了很久,结构体,链表的一些知识需要稍微复习下。 解题的思路是先比较找出两个链表中比较长的一个,对于两个链表中相等的部分做加法和进位比较简单,唱的那部分通过移动指针,单独考虑,一定要考虑前面进位产生的影响,一开始的代码没有考虑,出现了错误 C: . 成员运算符 与 -> 的区分 1、C 中 结构的定义 可以为 : struct point { int x; int y; }; 通过 结构名.成员 来进行引用 。 struct point *pp; 定义一个指向 struct point 类型对象的指针。 *pp 为该结构 (*pp.x)与(*pp.y)为该结构的成员 (*pp.x)中的括号为必须的, 因为

LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)

和自甴很熟 提交于 2020-01-31 04:55:00
1. 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开。 给出一个谜板的初始状态,返回 最少 可以通过多少次移动解开谜板,如果不能解开谜板,则返回 -1 。 示例: 输入:board = [ [ 1 , 2 , 3 ] , [ 4 , 0 , 5 ] ] 输出: 1 解释:交换 0 和 5 , 1 步完成 输入:board = [ [ 1 , 2 , 3 ] , [ 5 , 4 , 0 ] ] 输出: - 1 解释:没有办法完成谜板 输入:board = [ [ 4 , 1 , 2 ] , [ 5 , 0 , 3 ] ] 输出: 5 解释: 最少完成谜板的最少移动次数是 5 , 一种移动路径 : 尚未移动 : [ [ 4 , 1 , 2 ] , [ 5 , 0 , 3 ] ] 移动 1 次 : [ [ 4 , 1 , 2 ] , [ 0 , 5 , 3 ] ] 移动 2 次 : [ [ 0 , 1 , 2 ] , [ 4 , 5 , 3 ] ] 移动 3 次 : [ [ 1 , 0 , 2 ] , [ 4 , 5 , 3 ] ] 移动 4 次 : [ [ 1 , 2 , 0

Leetcode 16.最接近的三数之和(3Sum Closest)

会有一股神秘感。 提交于 2020-01-30 13:31:49
Leetcode 16.最接近的三数之和 1 题目描述( Leetcode题目链接 )   给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums = [ - 1 , 2 , 1 , - 4 ] , 和 target = 1 . 与 target 最接近的三个数的和为 2 . ( - 1 + 2 + 1 = 2 ) . 2 题解   借鉴之前做过类似题的思路,本题可以使用双指针的方法来解决。 对数组进行排序; 令返回值为正无穷大; 从第一个数组元素开始,每次固定一个数组元素,然后对该数组元素后面的所有元素使用双指针,每次判断当前固定的数组元素以及双指针的两个元素之和是否距离target更近,如果更近则更新返回值,如果等于target则直接返回target; 判断这三个数之和与target的大小,如果大于target则右指针向左移动,反之左指针向右移动; 另外在每次固定元素的时候可以判断当前元素和前一个元素是否相等,如果相等则直接continue,用于去冗余。 class Solution : def threeSumClosest ( self , nums : List [ int ] , target : int ) -

Leetcode 15.三数之和(3Sum)

强颜欢笑 提交于 2020-01-30 13:25:15
Leetcode 15.三数之和 1 题目描述( Leetcode题目链接 )   给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。 给定数组 nums = [ - 1 , 0 , 1 , 2 , - 1 , - 4 ] , 满足要求的三元组集合为: [ [ - 1 , 0 , 1 ] , [ - 1 , - 1 , 2 ] ] 2 题解   本题和第16题很类似,使用的方法也相同,都是使用双指针,首先排序,然后按照数组元素顺序固定位置,并对后面的数组进行双指针指向首尾遍历。指针移动的规则如下: 如果三数之和等于0,则在返回值中添加这三个数,并移动两个指针移动直到不等于其原来指向的位置的值; 如果三数之和大于0,则右指针向左移动; 如果三数之和小于0,则左指针向右移动。 class Solution : def threeSum ( self , nums : List [ int ] ) - > List [ List [ int ] ] : nums . sort ( ) length = len ( nums ) retv = [ ] for i in range ( length - 2 ) : if nums [ i ] +

Leetcode 18.四数之和(4Sum)

一个人想着一个人 提交于 2020-01-30 13:22:56
Leetcode 18.四数之和 1 题目描述( Leetcode题目链接 )   给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。 给定数组 nums = [ 1 , 0 , - 1 , 0 , - 2 , 2 ] ,和 target = 0 。 满足要求的四元组集合为: [ [ - 1 , 0 , 0 , 1 ] , [ - 2 , - 1 , 1 , 2 ] , [ - 2 , 0 , 0 , 2 ] ] 2 题解   题目和三数之和很像,在三数之和的外面再套一层循环,并增加一些判断就可以了。 class Solution : def fourSum ( self , nums : List [ int ] , target : int ) - > List [ List [ int ] ] : nums . sort ( ) length = len ( nums ) retv = [ ] for n in range ( length - 3 ) : if nums [ n ] + nums [ n + 1 ] + nums [ n + 2 ] + nums [

LeetCode解题记录(5)——最长回文子串

左心房为你撑大大i 提交于 2020-01-30 07:13:36
LeetCode解题记录——最长回文子串 题目说明 测试样例 题意理解 解题方案 题目说明 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 测试样例 输入: “cbbd” 输出: “bb” 题意理解 本题是子串情况下的找出最长回文串,主要在于回文串的判断。 解题方案 关于回文串的判断,可以有主动和被动两种方式。 关于被动判断,可以暴力将所有子串列举出来,然后将每一个子串做回文判断,即从两头开始遍历,寻找不相等的字符。 这样的情况时间复杂度很高,为 O ( n 3 ) O(n^3) O ( n 3 ) 。 主动判断法,可以采用回文串问题中很有效的中心扩展法。 所谓中心扩展法,就是选取中心,然后关于这个中心做对称扩展,直到不对称为止,这样得到的子串一定是回文串。 回文串根据字符个数奇偶的区别,分为单字符中心和双字符中心,在题目中分别判断即可。 class Solution { public : string longestPalindrome ( string s ) { if ( s . size ( ) <= 1 ) //处理空串和只有一个字符的情况 return s ; int maxl = - 1 ; string res ; for ( int i = 0 ; i < s . size ( ) - 1 ; i ++ ) { int j

LeetCode54,59,885题 螺旋矩阵I,II,II(蛇形矩阵)

家住魔仙堡 提交于 2020-01-30 06:10:06
文章目录 LeetCode 54.螺旋矩阵 I LeetCode 59.螺旋矩阵 II LeetCode 885.螺旋矩阵 III 这类题,都是纯模拟题,定义一个方向数组,然后一个变量d表示当前在哪个方向上 LeetCode 54.螺旋矩阵 I class Solution { public : vector < int > spiralOrder ( vector < vector < int >> & matrix ) { if ( ! matrix . size ( ) || ! matrix [ 0 ] . size ( ) ) return { } ; int m = matrix . size ( ) , n = matrix [ 0 ] . size ( ) ; vector < int > res ; vector < vector < bool >> st ( m , vector < bool > ( n , false ) ) ; int x = 0 , y = 0 , d = 0 ; int dx [ ] = { 0 , 1 , 0 , - 1 } , dy [ ] = { 1 , 0 , - 1 , 0 } ; for ( int i = 0 ; i < m * n ; i ++ ) { res . push_back ( matrix [ x ] [ y

leetcode 热题 Hot 100-5. 二叉树的最大深度

我怕爱的太早我们不能终老 提交于 2020-01-29 23:54:39
leetcode 热题 Hot 100-5. 二叉树的最大深度 题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最大深度 3 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路 递归大法 时间复杂度分析O(n) 代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public : int maxDepth ( TreeNode * root ) { if ( root == NULL ) return 0 ; return max ( maxDepth ( root - >