- 博客(28)
- 收藏
- 关注
原创 广度优先搜索-Python
基本思路:从起点出发,每次都尝试访问同一层的节点,如果同一层都访问完了,再访问下一层,最后广度优先搜索找到的路径就是从起点开始的最短合法路径。模板:1.不需要确定遍历的层数while queue 不空: cur = queue.pop() for 节点 in cur的所有相邻节点: if 该节点有效且未访问过: queue.push(该节点)2.需要确定遍历的层数level = 0while queue 不空: size = q
2022-04-14 15:03:35
762
原创 二叉树的匹配-Python
二叉树的镜像# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def mirrorTree(self, root: TreeNode) -> TreeNode: if no
2022-04-12 17:19:48
609
原创 深度优先搜索-Python
基本思路:深度优先遍历图的方法是,从图中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。例1:图像渲染输入: image = [[1,1,1],[1,1,0],[1,0,1]],sr = 1, sc = 1, newColor = 2输出: [[2,2,2],[2,2,0],[2,0,1]]解析
2022-04-12 11:58:01
1239
原创 二叉树的遍历-Python
前序遍历根-左-右# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def preorderTraversal(self , root: TreeNode) -> List[int]: res = [] def preorder
2022-04-11 22:22:51
121
原创 约瑟夫环-Python
N个数字排成一个圆环,每次删除第n个数字,求最后剩下的一个数字。经典的约瑟夫环问题,例如,N = [0,1,2,3,4,5,6,7,8,9],每次删除第3个数字,每次删除后,N的数值如下:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][3, 4, 5, 6, 7, 8, 9, 0, 1][6, 7, 8, 9, 0, 1, 3, 4][9, 0, 1, 3, 4, 6, 7][3, 4, 6, 7, 9, 0][7, 9, 0, 3, 4][3, 4, 7, 9][9, 3,
2022-04-09 18:40:31
3957
原创 nums[:]-Python
变量包含value和id,value就是变量里存储的值,id就是变量的实际存储的内存地址,根据这个内存地址我们就可以找到对应的变量数据。使用nums = nums[k:] + nums[:k] 修改列表时,nums的id地址改变了,若从内存去读取nums值,还是会返回原来列表。使用nums[:] = nums[k:] + nums[:k]修改列表时,nums的id地址不变,若从内存去读取nums值,则会返回修改后的列表。nums1 = [1,2,3,4,5,6,7]print(id(nums1),n
2022-04-07 12:07:40
1328
原创 二分法查找-Python
中心思想:数列从小到大排序,定义查找的范围 [left,right],每次取中点的数值mid跟target比较,如果相等,则mid为查找目标,如果不等则根据nums[mid]和target的大小缩小查找范围具体步骤:1、设定左右指针2、计算中间值mid,并判断nums[mid]与target的大小3、如果nums[mid] < target,左指针右移left = mid + 14、如果nums[mid] > target,右指针左移right= mid - 15、重复2、3、4步
2022-04-06 16:46:15
786
原创 函数装饰器-Python
嵌套函数:在函数中定义函数def A(k = "enter" ): print("This is A function") def B(): return "This is B function" def C(): return "This is C function" print(B()) print(C()) A()>>> This is A function>>> This is B
2022-03-31 00:51:51
1097
原创 *args和**kwargs参数
*args如果我们不确定往一个函数中传入多少参数,或者我们希望以元组(tuple)或者列表(list)的形式传参数的时候,可以使用*args。**kwargs如果我们不知道往函数中传递多少个关键词参数或者想传入字典的值作为关键词参数的时候,可以使用**kwargsdef func(*args, **kwargs): print(args,kwargs)func()>>> () {}func(*List)>>> (1, 2, 3) {}func(*T
2022-03-30 23:24:36
392
原创 获取文件名-Python
os.walk()获取当前目录路径,当前目录路径下所有子目录及非目录子文件walk()语法格式如下:os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])top – 根目录下的每一个文件夹(包含它自己),产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。topdown --可选,为True或者没有指定, 一个目录的3-元组将比它的任何子文件夹的3-元组先产生
2022-03-30 22:20:22
2239
原创 文件读取-Python
读取整个文件file_path = ('D:/filetext/A.txt')with open(file_path,encoding='UTF-8') as file_object: contents = file_object.read()print(contents)file_object.close()>>> 静夜思床前明月光疑似地上霜举头望明月低头思故乡逐行读取逐行读取时每行后面会打印一个空白行,因为文件中每行的末尾都有一个看不见的换行符,而函数
2022-03-30 21:16:42
276
原创 引用、传递引用、浅复制与深复制-Python
列表是可变数据类型,它的值可以增加,删除或改变字符串是不可变数据类型,它不能被更改引用变量存储的是对计算机内存位置的引用,这些位置存储了值。List1 = [1,2,3]List2 = List1List2[1] = 'abc'print(List1)>>> [1, 'abc', 3]print(List2)>>> [1, 'abc', 3]print(id(List1), id(List2))>>> 2021813609032
2022-03-30 20:29:18
95
原创 进制转换-Python
**二进制转十进制s为字符串int(s,2)**print(int('1100',2))>>> 12八进制转十进制s为字符串int(s,8)print(int('702',8))>>> 450十六进制转十进制s为字符串int(s,16)print(int('A2',16))>>> 162十进制转二进制n为整型,返回的是字符串bin(n)print(bin(8))>>> 0b1000pr
2022-03-30 18:17:33
581
原创 去重及排序-Python
去重set ()函数 ,无序集合,使用set去重返回的是新的集合对象。对于l列表来说,使用set了之后返回的是无序集合,如果需要返回的是list,需要使用list()做一次类型转换。当列表里面的数值为数字时,使用set()函数会进行排序,若为字符,则不会排序,且每次运行返回的顺序都不一样,即set()函数的无序性。List1 = [1,3,2,2,1]print(set(List1))>>> {1, 2, 3}print(list(set(List1)))>>
2022-03-30 16:06:22
4358
原创 回溯算法-Python
代码框架res = []def backtrack(选择列表, 路径): if 满足结束条件: res.append(路径): return for 选择 in 选择列表: 做选择 backtrack(选择列表, 路径): 撤销选择全排列nums = [1,2,3]res = []def backtrack(nums,pos,end): if pos == end: res.append(nums[:]) return res for i in range
2022-03-30 12:24:53
717
原创 约瑟夫环
从0开始到n-1,n个数形成一个闭环,每次删除第m个数,求最后一个数。class Solution {public: int lastRemaining(int n, int m) { int res=0; for(int i=2;i<=n;i++){ res=(res+m)%i; } return res; }};...
2020-05-24 21:31:29
460
原创 链表合辑
链表合辑1.两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807/** * Definition for s
2020-05-24 18:22:56
102
原创 数据反转合辑
数据反转1.字符串反转方法一:遍历前半部分字符串,将s[i]存入tmp中,s[i]=s[len-1-i],s[len-1-i]=tmp,从而实现s[i]和s[len-1-i]的交换;方法二:使用reverse函数;方法三:将字符从后往前依次push_back到原有字符串中,然后重新从len-1开始往前遍历,s[i]=s.back;之后pop_back最后一个字符。class Solution {public: void reverseString(vector<char>&a
2020-05-16 18:13:08
340
原创 寻找第一个比i大的值-遍历、排序
每日温度根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。解题思路:从后往前推算,最后一天输出为0,之后
2020-05-16 16:38:12
303
原创 罗马数与整数互换
罗马数与整数互换罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,
2020-05-13 22:16:48
177
原创 快速计算 x 的 n 次幂函数-二进制
计算 x 的 n 次幂函数将n换成二进制形式,以计算2的5次幂为例:5的二进制形式为101,即10=1∗20+0∗21+1∗2210=1*2^0+0*2^1+1*2^210=1∗20+0∗21+1∗2225=21∗40∗1612^5=2^1*4^0*16^125=21∗40∗161由此可见,每次乘的值都是前一个值的2次幂,当 n 对应位为0时跳过。class Solution {public: double myPow(double x, int n) { double
2020-05-12 21:45:15
1007
原创 解数独-回溯算法
解数独编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。解题思路:创建3个数组,分别记录横列、竖列、 3x3 宫内已出现的数字到n1、n2、n3中,之后遍历数独,遇到’.‘则循环填入1-9,若该数字已在n1或n2或n3,则跳过,继续填入下一个数字,若可填入成功,则将n1、n2、n3对应的位置改成1,继续寻
2020-05-11 20:28:39
690
原创 爬楼梯-动态规划、逆向推理
爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?解题思路:在n-1阶时向上爬1阶可到达楼顶,在n-2阶时向上爬2阶可到达楼顶,因此到到楼顶的爬法等于到达n-1阶和到达n-2阶的爬法之和。class Solution {public: int climbStairs(int n) { if(n <= 3)return n; int dp[n+1]; dp[1] =
2020-05-10 16:42:48
255
原创 最大矩形-遍历、动态规划
最大矩形给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出: 6解题思路:1.遍历整个矩阵,竖着相连的1依次增加存放在s_up中,横着相连的1依次增加存放在s_left中,考虑matrix可能为单列或单行,因此暂且将s_up或s_left的最大值赋予给最大
2020-05-08 23:33:20
465
原创 字符串解码-遍历
字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 ...
2020-05-07 21:38:55
343
原创 字符串相乘-遍历
字符串相乘给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”说明:num1 和 num2 的长度小于110。num1 和 num2 只...
2020-05-05 20:57:27
309
原创 单词的压缩编码-关联容器
单词的压缩编码给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。那么成功对给定单...
2020-05-05 14:22:07
207
原创 最长有效括号-动态规划
最长有效括号给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”解题思路:动态规划括号字串分两种:()()((()))初始化容器dp,从i=1开始遍历整个字符串s:1.查找()...
2020-05-04 22:46:01
202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人