08 2020 档案

摘要:题目95题 给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 。 示例: 输入:3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3]]解释:以上的输出对应以下 5 种不同 阅读全文
posted @ 2020-08-18 16:07 maoguai 阅读(179) 评论(0) 推荐(0)
摘要:题目 给定一个二叉树,返回它的中序 遍历。 实现 # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def inorderTraversal(self, roo 阅读全文
posted @ 2020-08-14 10:20 maoguai 阅读(98) 评论(0) 推荐(0)
摘要:题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。 示例: 输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35" 阅读全文
posted @ 2020-08-14 10:09 maoguai 阅读(144) 评论(0) 推荐(0)
摘要:题目 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: "12"输出: 2解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。 思路 这道题和70题爬楼梯 阅读全文
posted @ 2020-08-13 17:28 maoguai 阅读(167) 评论(0) 推荐(0)
摘要:题目 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []] 思路 这题的思路和40题与90题非常类似,需要对数组排序后,进行回 阅读全文
posted @ 2020-08-13 16:43 maoguai 阅读(97) 评论(0) 推荐(0)
摘要:题目 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。 格雷编码序列必须以 0 开头。 示例 1: 输入: 2输出: [0,1,3,2]解释:00 - 001 - 11 阅读全文
posted @ 2020-08-13 16:25 maoguai 阅读(76) 评论(0) 推荐(0)
摘要:题目 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 阅读全文
posted @ 2020-08-12 15:28 maoguai 阅读(137) 评论(0) 推荐(0)
摘要:题目 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5 思路 建立两个新链表a和b 阅读全文
posted @ 2020-08-12 14:52 maoguai 阅读(86) 评论(0) 推荐(0)
摘要:题目 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5输出: 1->2->5 思路 不断的遍历链表中的每个元素,若该元素的值和前后元素的值都不相等,则该元素就是独一无二的,把它加入结果链表里。 在实现的 阅读全文
posted @ 2020-08-12 14:25 maoguai 阅读(82) 评论(0) 推荐(0)
摘要:题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 实现 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # sel 阅读全文
posted @ 2020-08-11 11:31 maoguai 阅读(122) 评论(0) 推荐(0)
摘要:题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5 阅读全文
posted @ 2020-08-11 11:12 maoguai 阅读(130) 评论(0) 推荐(0)
摘要:题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board =[ ['A','B','C','E'], ['S','F','C',' 阅读全文
posted @ 2020-08-11 10:48 maoguai 阅读(125) 评论(0) 推荐(0)
摘要:题目 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []] 思路 回溯法 实现 class 阅读全文
posted @ 2020-08-10 11:19 maoguai 阅读(85) 评论(0) 推荐(0)
摘要:题目 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 示例: 输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],] 思路 回溯法 实现 class Solution: def combine(s 阅读全文
posted @ 2020-08-10 11:02 maoguai 阅读(130) 评论(0) 推荐(0)
摘要:题目 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意:不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0]输出 阅读全文
posted @ 2020-08-10 10:33 maoguai 阅读(99) 评论(0) 推荐(0)
摘要:题目 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1: 输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 5 阅读全文
posted @ 2020-08-08 11:25 maoguai 阅读(126) 评论(0) 推荐(0)
摘要:题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: [ [1,0,1], [0,0,0], [1,0,1]] 思路 从头遍历数组,记录0存在的行号和列号,然 阅读全文
posted @ 2020-08-08 10:59 maoguai 阅读(91) 评论(0) 推荐(0)
摘要:题目 以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中 阅读全文
posted @ 2020-08-08 10:47 maoguai 阅读(161) 评论(0) 推荐(0)
摘要:题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 思路 最开始使用的是回溯的方法,但是时间效率地下没有通过,于是想到了动态规划的算法。对于i楼梯,到达其的方法有从i-1跨一步和i-2跨两步,因 阅读全文
posted @ 2020-08-08 10:00 maoguai 阅读(145) 评论(0) 推荐(0)
摘要:题目 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4输出: 2 思路 二分法:找到k^2<x的k的最大值即可 实现 class Solution: def mySqr 阅读全文
posted @ 2020-08-08 09:41 maoguai 阅读(161) 评论(0) 推荐(0)
摘要:题目 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = "11", b = "1"输出: "100" 思路 位运算: 以13的二进制为0000 1101,9的二进制为0000 1001为例子 不考虑进位,分别对各位数进行 阅读全文
posted @ 2020-08-07 11:09 maoguai 阅读(103) 评论(0) 推荐(0)
摘要:题目 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。 思路 完全按照计算 阅读全文
posted @ 2020-08-07 10:14 maoguai 阅读(106) 评论(0) 推荐(0)
摘要:题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。 思路 思路与62题 阅读全文
posted @ 2020-08-07 09:55 maoguai 阅读(166) 评论(0) 推荐(0)
摘要:题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1  阅读全文
posted @ 2020-08-06 11:32 maoguai 阅读(171) 评论(0) 推荐(0)
摘要:题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 思路 回溯:能够实现,不断向右或者向下,但是效率过低,无法通过 动态规划: 阅读全文
posted @ 2020-08-06 11:24 maoguai 阅读(123) 评论(0) 推荐(0)
摘要:题目 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5- 阅读全文
posted @ 2020-08-06 09:48 maoguai 阅读(91) 评论(0) 推荐(0)
摘要:题目 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123""132""213""231""312""321"给定 n 和 k,返回第 k 个排列。 说明: 给定 n 的范围是 [1, 9]。给定 k 阅读全文
posted @ 2020-08-05 16:51 maoguai 阅读(104) 评论(0) 推荐(0)
摘要:题目 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 思路 与螺旋矩阵题完全一致 实现 class Solution: def generateMatrix(self, n: int) -> List[List[int]]: result = [ 阅读全文
posted @ 2020-08-05 15:51 maoguai 阅读(172) 评论(0) 推荐(0)
摘要:题目 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词,请返回 0 。 说明:一个单词是指仅由字母组成、不包含任何空格字符的最大子字符串。 思路 将字符串从后向前遍历,当遇到非空格 阅读全文
posted @ 2020-08-05 15:39 maoguai 阅读(139) 评论(0) 推荐(0)
摘要:题目 给出一个无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1: 输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9] 阅读全文
posted @ 2020-08-05 15:05 maoguai 阅读(187) 评论(0) 推荐(0)
摘要:题目 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]] 思路 通过设置一个移动的判定区间,来完成区间的合并 首先对数组排序,使其以左区间为标准,从小到大,依次排序,然后依次读出 阅读全文
posted @ 2020-08-05 11:17 maoguai 阅读(146) 评论(0) 推荐(0)
摘要:题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 思路 贪心算法:记录每一个位置能够跳跃到的最远距离,如果超过前者的距离则更新,如果不能则保留原距离。注意,在跳跃的时候,要确保当前位置是可达的,即是在最远距 阅读全文
posted @ 2020-08-05 10:43 maoguai 阅读(111) 评论(0) 推荐(0)
摘要:题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 思路 对于每个外层,从左上方开始以顺时针的顺序遍历所有元素。假设当前层的左上角位于(top,left),右下角位于(bottom,right) 按照如下顺序遍历当前层的元素: 1.从左到右 阅读全文
posted @ 2020-08-04 16:42 maoguai 阅读(162) 评论(0) 推荐(0)
摘要:题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 思路 动态规划:求整个数组的连续子数组的最大和,可以求出每个位置的连续子数组的最大和,返回其最大值即可。 分治: 实现 动态规划 class Solution: def maxSubArra 阅读全文
posted @ 2020-08-04 16:35 maoguai 阅读(143) 评论(0) 推荐(0)
摘要:题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数 n,返回 n 皇后不同的解决方案的数量。 思路 与51题完全一致 实现 class Solution: def totalNQueens(self, n: int) -> int: t 阅读全文
posted @ 2020-08-04 13:03 maoguai 阅读(107) 评论(0) 推荐(0)
摘要:题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。 每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。 思路 这道题思路与37解数独 阅读全文
posted @ 2020-08-04 11:00 maoguai 阅读(148) 评论(0) 推荐(0)
摘要:题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 思路 最初的想法n>0计算res = res*x 计算n次,n<0,将x取倒数后同理,但结果表明计算速度太慢了。 后续应该采用快速幂的算法。这里的本质是分治的思想, 递归:例如当 n = 8 时,x^8 = (x^4)^2 = ((x 阅读全文
posted @ 2020-08-03 16:10 maoguai 阅读(146) 评论(0) 推荐(0)
摘要:题目 编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 '.' 表示。 思路 使用暴力破解是不现实的,其需要 9^81次运算 阅读全文
posted @ 2020-08-03 15:30 maoguai 阅读(186) 评论(0) 推荐(0)
摘要:题目 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 思路 由于异位词由相同字母构成,所以可以用一个顺序的字符串作为这些字母异位词的标志,由此可以想到字典的方法。例如"ate","eat","tea",可以将"aet"作为键,字符串作为值加入其中。 实现 cl 阅读全文
posted @ 2020-08-03 11:30 maoguai 阅读(125) 评论(0) 推荐(0)
摘要:题目 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 思路 没有想到。看过解答后知道可以转置加翻转即可,且能达到最优的时间复杂度O(N^2)。 实现 class Solution: def rotate(self, matrix: List[List[int]]) -> 阅读全文
posted @ 2020-08-03 10:52 maoguai 阅读(122) 评论(0) 推荐(0)
摘要:题目 给定一个可包含重复数字的序列,返回所有不重复的全排列。 思路 其思路与46题完全一致,但是需要与组合总和2题一般,在同一层取出重复元素。因此可以在每一层设置一个set()类型,将访问过的元素放入其中,禁止相同元素在同一层被提取。 实现 class Solution: def permuteUn 阅读全文
posted @ 2020-08-03 10:30 maoguai 阅读(95) 评论(0) 推荐(0)
摘要:题目 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 思路 回溯算法 不断取出字符,对剩余字符进行选择 实现 class Solution: def permute(self, nums: List[int]) -> List[List[int]]: result = [] def bac 阅读全文
posted @ 2020-08-03 10:06 maoguai 阅读(107) 评论(0) 推荐(0)
摘要:题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 思路 字符串转数字:从字符串第一位开始取,每次取出的值转换为数字与之前的和的10倍相加即可 数字转字符串:str()函数 实现 class Solution: de 阅读全文
posted @ 2020-08-03 09:31 maoguai 阅读(90) 评论(0) 推荐(0)
摘要:题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 思路 此题思路与39题类似,利用回溯的方式,但是难点在于不能重复利用。 避免重复要让同一层级 阅读全文
posted @ 2020-08-02 19:39 maoguai 阅读(131) 评论(0) 推荐(0)
摘要:题目 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 思路 这道题采用遍历的方式效率太低,因此可以想到回溯的方式。 算法: 1.对candid 阅读全文
posted @ 2020-08-02 15:32 maoguai 阅读(87) 评论(0) 推荐(0)
摘要:题目 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 思路 最简单首先比较每一行,比较每一列,再比较每一个方块,实现方法比 阅读全文
posted @ 2020-08-02 11:58 maoguai 阅读(126) 评论(0) 推荐(0)