自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

you are sherlocked by me!

大家好,我是江湖狗哥!

  • 博客(39)
  • 收藏
  • 关注

原创 leetcode二叉搜索树中的搜索(700)

给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。address# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonedef search_.

2020-08-28 19:14:56 115

原创 leetcode解码字母到整数映射(1309)

给你一个字符串 s,它由数字(‘0’ - ‘9’)和 ‘#’ 组成。我们希望按下述规则将 s 映射为一些小写英文字符:s字符(‘a’ - ‘i’)分别用(‘1’ - ‘9’)表示。字符(‘j’ - ‘z’)分别用(‘10#’ - ‘26#’)表示。返回映射之后形成的新字符串。题目数据保证映射始终唯一。输入:s = “10#11#12”输出:“jkab”解释:“j” -> “10#” , “k” -> “11#” , “a” -> “1” , “b” -> “2”.

2020-08-27 21:31:56 201

原创 leetcode二叉树的最大深度(104)

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。address# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonedef max_depth(root: Tre.

2020-08-27 20:44:02 127

原创 leetcode判断能否形成等差数列(1502)

给你一个数字数组 arr 。如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。输入:arr = [3,5,1]输出:true解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。addressfrom typing import Listdef can_make_arithmetic_progr.

2020-08-27 20:00:48 235

原创 leetcode翻转链表(剑指offer)

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLaddress# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = None.

2020-08-27 19:43:30 116

原创 leetcode通过翻转子数组使两个数组相等(1460)

给你两个长度相同的整数数组 target 和 arr 。每一步中,你可以选择 arr 的任意 非空子数组 并将它翻转。你可以执行此过程任意次。如果你能让 arr 变得与 target 相同,返回 True;否则,返回 False 。输入:target = [1,2,3,4], arr = [2,4,1,3]输出:true解释:你可以按照如下步骤使 arr 变成 target:1- 翻转子数组 [2,4,1] ,arr 变成 [1,4,2,3]2- 翻转子数组 [4,2] ,arr 变成 .

2020-08-27 19:30:35 163

原创 leetcode机器人能否返回原点(657)

在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。输入: “UD”.

2020-08-27 18:53:37 149

原创 leetcode6和9组成的最大数字(1323)

给你一个仅由数字 6 和 9 组成的正整数 num。你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。请返回你可以得到的最大数字。输入:num = 9669输出:9969解释:改变第一位数字可以得到 6669 。改变第二位数字可以得到 9969 。改变第三位数字可以得到 9699 。改变第四位数字可以得到 9666 。其中最大的数字是 9969 。addressdef maximum_69_number(num: int) -> int: .

2020-08-24 19:36:58 309

原创 leetcode唯一摩尔斯密码词(804)

国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “a” 对应 “.-”, “b” 对应 “-…”, “c” 对应 “-.-.”, 等等。为了方便,所有26个英文字母对应摩尔斯密码表如下:[".-","-…","-.-.","-…",".","…-.","–.","…","…",".—","-.-",“.-…”,"–","-.","—",".–.","–.-",".-.","…","-","…-","…-",“.–”,"-…-","-.–","–…"].

2020-08-24 19:24:31 177

原创 leetcode奇数值单元格的数目(1252)

给你一个 n 行 m 列的矩阵,最开始的时候,每个单元格中的值都是 0。另有一个索引数组 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。你需要将每对 [ri, ci] 指定的行和列上的所有单元格的值加 1。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 「奇数值单元格」 的数目。输入:n = 2, m = 3, indices = [[0,1],[1,1]]输出:6解释:最开始的矩阵是 [[0,0.

2020-08-24 19:10:45 94

原创 leetcode转换成小写字母(709)

实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。输入: “Hello”输出: “hello”addressdef to_lower_case(string: str) -> str: # return string.lower() # 1. 利用ascii码转换, 'A'-'Z'对应65-90, 'a'-'z'对应97-122 # res = [] # for c.

2020-08-23 14:34:45 188

原创 leetcode从尾到头打印链表(剑指offer)

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。输入:head = [1,3,2]输出:[2,3,1]addressfrom typing import List# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = Nonedef reverse_print(head:.

2020-08-23 10:33:32 131

原创 leetcode统计有序矩阵中的负数(1351)

给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。请你统计并返回 grid 中 负数 的数目。输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]输出:8解释:矩阵中共有 8 个负数。addressfrom typing import Listdef count_negatives(grid: List[List[int]]) -> int: coun.

2020-08-22 21:48:28 179

原创 leetcode替换空格(剑指offer)

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。输入:s = “We are happy.”输出:“We%20are%20happy.”addressdef replace_space(s: str) -> str: # 内置函数 # return s.replace(' ', '%20') res = [] for c in s: if c == ' ': res.append('%20') .

2020-08-22 21:23:41 154

原创 leetcode二叉搜索树的范围和(983)

给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。输入:root = [10,5,15,3,7,null,18], L = 7, R = 15输出:32分析:105 153 7 null 18找出7 <= x <= 15的所有节点值之和address# Definition for a binary tree node.class TreeNode: def __init__(self.

2020-08-22 20:51:09 193

原创 leetcode合并二叉树(617)

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。address# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left.

2020-08-21 20:38:19 112

原创 leetcode汉明距离(461)

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.addressdef hamming_distance(x: int, y: int) -> int: # 计算x和y之间的汉明距离,可以先计算x XOR y, 然后统计结果中等于1的位数 # 1. 内置位计数功能 # return bin(x ^ y).count('1') # 2. 自己实.

2020-08-21 20:22:02 133

原创 leetcode将每个元素替换为右侧最大元素(1299)

给你一个数组 arr,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。完成所有替换操作后,请你返回这个数组。输入:arr = [17,18,5,4,6,1]输出:[18,6,6,6,1,-1]提示:1 <= arr.length <= 10^41 <= arr[i] <= 10^5addressfrom typing import Listdef replace_elements(arr: List[int]) -&g.

2020-08-21 19:49:14 136

原创 leetcode删除最外层的括号(1021)

有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + … + P_k,其中 P_i 是有效括号字.

2020-08-21 19:24:13 140

原创 leetcode分割平衡字符串(1221)

在一个「平衡字符串」中,‘L’ 和 ‘R’ 字符的数量是相同的。给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。输入:s = “RLLLLRRRLR”输出:3解释:s 可以分割为 “RL”, “LLLRRR”, “LR”, 每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’。address# 可遍历字符串,遇到L加一,R减一,当为0时表示经过一个平衡字符串def balanced_string_split(s: str) .

2020-08-15 16:20:10 128

原创 leetcode数组中两元素的最大乘积(1464)

给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你计算并返回该式的最大值。输入:nums = [3,4,5,2]输出:12解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)(nums[2]-1) = (4-1)(5-1) = 3*4 = 12addressfrom typing import Listdef max_product(nums.

2020-08-15 15:07:10 209

原创 leetcode打印从1到最大的n位数

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]addressfrom typing import Listclass Solution: def printNumbers(self, n: int) -> List[int]: # return [i for i in range(1, 10 *.

2020-08-13 21:24:33 149

原创 leetcode二叉树镜像

请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1address# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x .

2020-08-13 21:12:19 293

原创 leetcode旅行终点站(1436)

给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] =[cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。题目数据保证线路图会形成一条不存在循环的线路,因此只会有一个旅行终点站。输入:paths = [[“London”,“New York”],[“New York”,“Lima”],[“Lima”,“Sao Paulo”]]输出:“Sao Paulo”.

2020-08-13 19:54:50 293

原创 leetcode返回倒数第k个节点

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4address# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: .

2020-08-12 18:54:02 173

原创 leetcode重新排列字符串(1528)

给你一个字符串 s 和一个 长度相同 的整数数组 indices 。请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。返回重新排列后的字符串。输入:s = “codeleet”, indices = [4,5,6,7,0,2,1,3]输出:“leetcode”解释:如图所示,“codeleet” 重新排列后变为 “leetcode” 。addressfrom typing import Listdef restore_string(s.

2020-08-08 21:25:25 179

原创 leetcode二进制链表转整数(1290)

给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)address# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x se.

2020-08-08 20:45:12 123

原创 leetcode访问所有点的最小时间(1266)

平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。你可以按照下面的规则在平面上移动:每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。必须按照数组中出现的顺序来访问这些点。address思路:对于平面上两个点x=(x0, x1)和y=(y0, y1),设横坐标距离之差为dx,纵坐标距离之差为dy.有三种情况来计算从x到y的最小次数dx &.

2020-08-08 19:44:12 240

原创 leetcode有多少小于当前数字的数字(1365)

给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。输入:nums = [8,1,2,2,3]输出:[4,0,1,1,3]解释:对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。对于 nums[1]=1 不存在比它小的数字。对于 nums[2]=2 存在一个比.

2020-08-08 19:20:17 149

原创 leetcode将数字变成0的操作次数

给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。输入:num = 14输出:6解释:步骤 1) 14 是偶数,除以 2 得到 7 。步骤 2) 7 是奇数,减 1 得到 6 。步骤 3) 6 是偶数,除以 2 得到 3 。步骤 4) 3 是奇数,减 1 得到 2 。步骤 5) 2 是偶数,除以 2 得到 1 。步骤 6) 1 是奇数,减 1 得到 0 。addressdef number_of_.

2020-08-07 21:44:23 196

原创 leetcode解压缩编码列表(1313)

给你一个以行程长度编码压缩的整数列表 nums 。考虑每对相邻的两个元素 [freq, val] = [nums[2i], nums[2i+1]] (其中 i >= 0 ),每一对都表示解压后子列表中有 freq 个值为 val 的元素,你需要从左到右连接所有子列表以生成解压后的列表。请你返回解压后的列表。输入:nums = [1,2,3,4]输出:[2,4,4,4]解释:第一对 [1,2] 代表着 2 的出现频次为 1,所以生成数组 [2]。第二对 [3,4] 代表着 4 的出.

2020-08-07 20:57:51 131

原创 leetcode删除中间节点

实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->faddress# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# .

2020-08-06 10:34:21 105

原创 leetcode左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。输入: s = “abcdefg”, k = 2输出: “cdefgab” 7addressdef reverse_left_words(s: str, k: int) -> str: # solution 1: # return s[k:] + s[:k] .

2020-08-06 09:54:14 160

原创 leetcode数组异或操作(1486)

给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果。addressfrom functools import reducedef xor_operation(n: int, start: int) -> int: return reduce(lambda x, y: x ^ y, [start + 2 *.

2020-08-06 09:31:18 137

原创 leetcode重新排序数组(1470)

给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,…,xn,y1,y2,…,yn]的格式排列。请你将数组按 [x1,y1,x2,y2,…,xn,yn]格式重新排列,返回重排后的数组。输入:nums = [2,5,1,3,4,7], n = 3输出:[2,3,5,4,1,7]解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7]tips:1 <= n <= 500nums.length =.

2020-08-05 21:14:11 159

原创 leetcode拥有最多糖果的孩子(1431)

address给你一个数组candies和一个整数extraCandies,其中candies[i]代表第 i 个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的extraCandies个糖果分配给孩子们之后,此孩子有 最多的糖果。注意,允许有多个孩子同时拥有 最多的糖果数目。输入:candies = [2,3,5,1,3], extraCandies = 3输出:[true,true,true,false,true]解释:孩子 1 有 2 个糖果,如果他得到所有额外的.

2020-08-05 19:31:27 196

原创 leetcode好数对的数目(1512)

给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始提示:1 <= nums.length <= 1001 <= nums[i] <= 100addressdef pair_.

2020-08-05 19:11:05 195

原创 leetcode一维数组的动态和(1480)

给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。address方法一:from typing import Listdef running_sum(nums: List[int]) -> List[int]: ret.

2020-08-04 21:31:19 237

原创 leetcode验证ip地址(468)

验证ipv4和ipv6地址,题目参考leetcode 468方法:使用模块正则表达式,该方法性能不太好分治法,效率最高的方法之一from ipaddress import ip_address, IPv6Address# 该模块认为如果IPv4地址包含前置0,则地址是有效的def valid_ip_address(ip: str) -> str: try: return "IPv6" if type(ip_address(ip)) is IPv6Add.

2020-08-03 22:52:34 252

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除