- 博客(22)
- 收藏
- 关注
原创 汉明距离和全排列
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给你两个整数x和y,计算并返回它们之间的汉明距离。从题目出发,可以转化为两个整数异或后有多少位1,也就是转化为二进制整数中有多少位1。可以利用位运算n&(n-1)移除最低位1以计算1的个数。代码参考:class Solution: def hammingDistance(self, x: int, y: int) -> int: l = x^y d = 0 ...
2021-11-27 15:17:48 165
原创 括号生成问题
数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。不考虑时间限制的情况,一般都会想到暴力解法(递归和回溯)。我们先来看回溯+剪枝,采用DFS(深度优先搜索)的方法,做减法,构造树形结构图,需要产生分支,左右括号数目需要大于0,当左右括号的数目为0时,递归终止。左括号大于0时,拼接左括号,右括号数目不能小于左括号,不然无法产生分支(也就是括号无法成对)。贴上大佬的一个图解:作者:liweiwei1419 链...
2021-11-25 22:11:03 241
原创 11.盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。如图所示,容积即为两个红色柱状的较小高度的柱状乘以其距离。从另一方面来说,这其实就是这两个边界,那么可以想到双指针。关于移动哪个指针的问题,从问题出发,我们想要容纳更多的水,而result = min(height) * 边...
2021-11-24 22:11:39 89
原创 78.子集
给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。在解决这道题前,刚好复习一下切片的一些知识。python切片:变量名[开始索引(默认为0):结束索引(默认为最后一个位置):步长(默认为1,为负时表示逆序)]举例:一维数组:[a:b],左闭右开 [::],所有元素 [::-1],倒序二维数组:注意有无逗号...
2021-11-21 21:51:20 597
原创 21.合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。看到链表,想到常用的递归和迭代方法。首先是递归方法:如果两个链表中有空链表,返回另一个不为空或者也为空的链表,由于l1,l2是已排好序的非递减链表,我们可以对其值直接进行比较,比较完后继续遍历下一个点。代码如下:# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=Non..
2021-11-19 19:16:15 68
原创 19.删除列表的倒数第N个节点
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。中等难度题,由于对链表还不够熟悉,今日题目就是学习。对双指针稍微熟悉一点,这里先贴上官方的双指针的解释,其他方法等后期更熟悉了更新学习记录。在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummy node),它的next 指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断了。例如,在本题中,如果我们要删除节点 y,我们需要知道节点 y的前驱节点 x,并将 x的指针指向 y的后继节点。但由于头节点不存在...
2021-11-18 20:51:33 125
原创 2.两数相加
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。设置一个进位变量result,两个链表只要有一个非空就继续遍历,如果链表遍历结束,但进位不为0,需要将进位项添加到末尾。(注意进位变量设置为整型变量)# Definition for singly-linked list.# class ListNode:# ...
2021-11-17 21:21:17 50
原创 144.二叉树的前序遍历
给你二叉树的根节点root,返回它节点值的前序遍历。一、简单题,前序遍历的顺序就是根节点-左节点-右节点,递归根据遍历顺序编写程序即可。# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self...
2021-11-16 19:44:25 153
原创 1185.一周中的第几天
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。因为题目给出的日期是在1971到2100年之间的有效日期,所以可统计距离1971.1.1的总天数。已知1971.1.1是周五,区分闰年和闰月,得到总天数。对星期求余...
2021-11-14 20:28:47 261
原创 434.字符串中的单词数
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。由题意可知,如果空格后非空格,则可记为一个单词,对于由非空格开始的字符,需要计算该单词。(PS:我发现有一个问题是我会根据提交错误去对应修改自己的代码,而不是一开始就考虑全面,但实际测试中不会给你慢慢修改的机会,因此要练习写代码前尽量思考完善再着手编写代码),则可得到如下:class Solution: def countSegments(self, s: str) -
2021-11-13 13:47:42 344
原创 520.检测大写字母
我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 "USA" 。单词中所有字母都不是大写,比如 "leetcode" 。如果单词不只含有一个字母,只有首字母大写,比如"Google" 。给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。今日的每日一题,看到就想到用库,小白解法。字符串.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。 字符串.isalpha() 所有字符都是..
2021-11-13 13:12:40 75
原创 125.验证回文字串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。此题我采用了暴力解法(哎呀呀,小白只能开始就想到暴力),先列举所有的标点符号和空格,将其删除并将字母大小写转换一致,然后对比字符串倒序正序是否一致,返回结果class Solution: def isPalindrome(self, s: str) -> bool: import string m = '!"#$%&a
2021-11-12 21:07:22 459
原创 119.杨辉三角II
给定一个非负索引rowIndex,返回「杨辉三角」的第rowIndex行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。联想到杨辉三角I的题目,可以想到先把杨辉三角每一行构造出来,然后根据已知索引直接索引到那一行。class Solution: def getRow(self, rowIndex: int) -> List[int]: ret = [] k = rowIndex for i in range(k+1)...
2021-11-12 20:35:26 453
原创 495.提莫攻击
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。当提莫攻击艾希,艾希的中毒状态正好持续duration 秒。正式地讲,提莫在 t 发起发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。给你一个 非递减 的整数数组 timeS.
2021-11-10 22:24:38 67
原创 66.加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头一个相对简单的题,但因为9进位溢出问题,用了一个小时才解决,试过不同方法,思想类似,但总有因素没考虑到。class Solution: def plusOne(self, digits: List[int]) -> List[int]: if digits == [0].
2021-11-09 22:12:58 45
原创 69.sqrt(x)
给你一个非负整数 x ,计算并返回x的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。看到该题想到曾经做过的有效的完全平方数的题目,类似地,可以先使用暴力解法。由题目有,最后返回的i满足i*i<= x < (i+1)*(i+1),所以终止循环可以使用左边界,因为有自加操作,最后返回结果需要减1。class Solution: def...
2021-11-09 08:49:06 88
原创 猜数字游戏
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls", 公牛),有多少位属于数字猜对了但是位置不对(称为 "Cows", 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。给你一个秘密数字secret 和朋友猜测的数字guess ,请你返回对朋友这次猜测的提示。提示的格式为 "..
2021-11-08 20:20:35 192
原创 前 n 个数字二进制中 1 的个数
给定一个非负整数n,请计算0到n之间的每个数字的二进制表示中 1 的个数,并输出一个数组。一、看到题目,想到判断一个数是否是2的幂的方法,可以利用位与方法。n&(n-1)可以将n二进制表示的最低位1移除,则可以利用此判断1的个数。class Solution: def countBits(self, n: int) -> List[int]: count = [0] cnt = 0 for i in range(...
2021-11-08 18:12:26 201
原创 27.移除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。最初一看,和26题很像,依然想到遍历数组,但是正序会有错误。##错误解法,正序循环class Solution: def removeElement(self, nums: List[int], val: int) -> ...
2021-11-07 16:51:54 51
原创 leetcode14.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""这是一个简单题(???对我来说,可能并不简单),实际做的时候发现,根本不会,自己的暴力解超出了时间限制,做了许久,只能看解析。!!!看解析我都看不大懂,哭,这就是简单题的威力吗?图解很好懂,但具体实现就比较费解。今天把答案贴上来,加上自己的注释理解。一、首先是官方的横向扫描法class Solution: def longestCommonPrefix(self, strs: List[str].
2021-11-06 21:30:39 502
原创 leetcode 26.删除有序数组中重复项
这道题拿到手,我以为很简单,想半天,我竟然做不出来,不知道哪一步错了,但感觉思路是没错的,看了一下别人的,找到了问题所在。我的想法是遍历数组,如果前后两个元素相等,删除其中一个,但是最后索引会出现遗漏对象,别人的引入了j来抵消,就多一步,效果大不一样。```pythondef removeDuplicates(self, nums: List[int]) -> int: j = 0 for i in range(1,len(nums)): ...
2021-11-05 08:56:48 82
原创 leetcode 367.有效的完全平方数
一开始直接想暴力求解,结果果然超出时间限制。defisPerfectSquare(self,num:int)->bool:foriinrange(num+1):ifi*i==num:returnTruereturnFalse...
2021-11-04 21:13:25 67
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人