编程题
编程题
Sher_lyj
这个作者很懒,什么都没留下…
展开
-
JZ33 丑数 python
JZ33 丑数 # -*- coding:utf-8 -*-class Solution: def GetUglyNumber_Solution(self, index): if index <= 1: return index ugly = [1] idx_2, idx_3, idx_5 = 0,0,0 while len(ugly) < index: cur_ugly原创 2021-09-05 20:03:55 · 131 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串 python
剑指 Offer 48. 最长不含重复字符的子字符串my version举例分析错误记录忘记平时移动中累加长度’a’“pwwkew”class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ ret = 0 max_diff_str_len = 0 # 存放原创 2021-09-04 15:04:33 · 150 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
剑指 Offer 47. 礼物的最大价值class Solution(object): def maxValue(self, grid): """ :type grid: List[List[int]] :rtype: int """ if not grid: return m = len(grid) n = len(grid[0]) max_v原创 2021-09-02 14:04:06 · 92 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串 python
剑指 Offer 46. 把数字翻译成字符串class Solution(object): def translateNum(self, num): """ :type num: int :rtype: int """ if num == 0: return 1 # 将数字按每一位转换为数组 nums = [] while num:原创 2021-09-01 22:42:01 · 189 阅读 · 0 评论 -
JZ32 把数组排成最小的数 python
JZ32 把数组排成最小的数my version求所有排列的集合再求最小值注意求排列的写法class Solution: def __init__(self): self.num = [] def permutation(self, numbers, start): if start == len(numbers): s = '' for j in range(len(numbers)):原创 2021-09-01 22:37:21 · 226 阅读 · 0 评论 -
JZ31 整数中1出现的次数(从1到n整数中1出现的次数) pyhton
JZ31 整数中1出现的次数(从1到n整数中1出现的次数)my version1不考虑时间复杂度,判断每个数字中1的个数class Solution: def is_with_1(self, n): count = 0 while n: if n % 10 == 1: count += 1 n = n // 10 return count def Numbe原创 2021-09-01 18:04:23 · 79 阅读 · 0 评论 -
JZ30 连续子数组的最大和 python
JZ30 连续子数组的最大和my version错误记录把每次连续加和的最大值记错为每个出现的最大值class Solution: def FindGreatestSumOfSubArray(self, array): if array: con_sum = [] for i in range(len(array)): con_sum.append(array[i])原创 2021-09-01 15:34:16 · 142 阅读 · 0 评论 -
JZ63 数据流中的中位数 python
JZ63 数据流中的中位数my version# -*- coding:utf-8 -*-class Solution: def __init__(self): self.data = [] def Insert(self, num): self.data.append(num) self.data.sort() def GetMedian(self): if self.data: len原创 2021-09-01 14:37:21 · 127 阅读 · 0 评论 -
JZ29 最小的K个数 python
JZ29 最小的K个数my version选择排序时间复杂度O(kn)class Solution: def GetLeastNumbers_Solution(self, tinput, k): for i in range(k): min_idx = i for j in range(i+1, len(tinput)): if tinput[min_idx] > tinput[j]:原创 2021-08-31 15:36:41 · 175 阅读 · 0 评论 -
JZ28 数组中出现次数超过一半的数字 python
JZ28 数组中出现次数超过一半的数字my versionclass Solution: def MoreThanHalfNum_Solution(self, numbers): dic = {} # {num: count} count = len(numbers) // 2 for n in numbers: if n in dic: dic[n] += 1 el原创 2021-08-30 22:19:32 · 149 阅读 · 0 评论 -
JZ27 字符串的排列 python
JZ27 字符串的排列动态规划把问题分解为两步:求第一个字符为所有可能的字母(把第一个字母和后面所有与第一个字符不等的字符交换)固定第一个字符,求后面字符的排序数组转换为字符串eg.[‘a’, ‘b’]想转换为字符串,可用''.join(['a', 'b'])得到’ab’class Solution: def __init__(self): self.ret = [] def dp(self, s, i): if i == len(s):原创 2021-08-30 20:36:54 · 92 阅读 · 0 评论 -
JZ61 序列化二叉树 python
JZ61 序列化二叉树先序遍历构造class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def Serialize(self, root): # write code here if not root: return '#'原创 2021-08-29 20:01:16 · 168 阅读 · 0 评论 -
JZ26 二叉搜索树与双向链表 python
JZ26 二叉搜索树与双向链表中序遍历class Solution: def dfs(self, node): if not node: return if node.left: self.dfs(node.left) node.left = self.pre if self.pre: self.pre.right = node self.p原创 2021-08-29 18:11:53 · 120 阅读 · 0 评论 -
JZ25 复杂链表的复制 python
JZ25 复杂链表的复制哈希表my version错误记录复制首节点时,不能np_指针不能往后移,否则会为空class RandomListNode: def __init__(self, x): self.label = x self.next = None self.random = Noneclass Solution: # 返回 RandomListNode def Clone(self, pHead):原创 2021-08-29 15:47:41 · 225 阅读 · 0 评论 -
JZ24 二叉树中和为某一值的路径 python
JZ24 二叉树中和为某一值的路径my version错误记录复制内容时,注意是否为引用self.ret.append(copy.deepcopy(path))由于这里的path是引用,因此如果直接self.ret.append(path)之后随着path改变,self.ret中的值也会跟着改变import copyclass TreeNode: def __init__(self, x): self.val = x self.left = Non原创 2021-08-28 21:19:36 · 128 阅读 · 0 评论 -
JZ23 二叉搜索树的后序遍历序列 python
JZ23 二叉搜索树的后序遍历序列后序遍历得到的序列,最后一个值为根节点的值,数组中前面的数字分为两部分第一部分是左子树节点的值,他们都比根节点的值小,第二部分是右子树节点的值,他们都比根节点的值大错误记录当需要判断一个范围内数字与某个数字的大小情况时,先判断这个范围是否为空class Solution: def dfs(self, arr, start, end): if start >= end: return True原创 2021-08-28 18:21:56 · 190 阅读 · 0 评论 -
JZ59 按之字形顺序打印二叉树 python
JZ59 按之字形顺序打印二叉树my version错误记录自行添加特殊符号后,没有判断边界条件from queue import Queue class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def Print(self, pRoot): if not pR原创 2021-08-28 00:23:53 · 105 阅读 · 0 评论 -
JZ22 从上往下打印二叉树 python
JZ22 从上往下打印二叉树my versionfrom queue import Queue class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: # 返回从上到下每个节点值列表,例:[1,2,3] def PrintFromTopToBottom(self, root):原创 2021-08-27 21:54:52 · 109 阅读 · 0 评论 -
JZ21 栈的压入、弹出序列 python
JZ21 栈的压入、弹出序列my version错误记录遇到数组下标可能越界的情况,需要把判断越界条件写在前面,比如while push_idx < len(pushV) and pushV[push_idx] != popV[pop_idx]: and前后顺序颠倒会出错# -*- coding:utf-8 -*-class Solution: def IsPopOrder(self, pushV, popV): if len(pushV) != len(pop原创 2021-08-27 21:18:30 · 138 阅读 · 0 评论 -
JZ20 包含min函数的栈 python
JZ20 包含min函数的栈my version错误记录栈为空的特殊判断class Solution: def __init__(self): self.stack = [] self.min_stack = [] def push(self, node): self.stack.append(node) if self.min_stack: self.min_stack.appe原创 2021-08-27 18:32:44 · 180 阅读 · 0 评论 -
JZ19 顺时针打印矩阵 python
JZ19 顺时针打印矩阵可以将矩阵看成若干层,首先打印最外层的元素,其次打印次外层的元素,直到打印最内层的元素。对于每层,从左上方开始以顺时针的顺序遍历所有元素。假设当前层的左上角位于 (top,left),右下角位于(bottom,right),按照如下顺序遍历当前层的元素。1、从左到右遍历上侧元素,依次为(top,left) 到(top,right)。2、从上到下遍历右侧元素,依次为(top+1,right) 到 (bottom,right)。3、如果 left<right 且top&原创 2021-08-26 21:41:19 · 409 阅读 · 0 评论 -
JZ58 对称的二叉树 python
JZ58 对称的二叉树先序遍历 根左右 同时根右左class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def bfs(self, r1, r2): if not r1 and not r2: return True if not r原创 2021-08-26 18:05:54 · 85 阅读 · 0 评论 -
JZ18 二叉树的镜像
JZ18 二叉树的镜像class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def Mirror(self , pRoot ): if not pRoot: return pRoot.left, pRoot.right = pRoot原创 2021-08-26 17:36:36 · 77 阅读 · 0 评论 -
JZ17 树的子结构 python
JZ17 树的子结构class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def dfs(self, r1, r2): if r2 is None: return True if r1 is None: retu原创 2021-08-26 17:34:09 · 175 阅读 · 1 评论 -
JZ16 合并两个排序的链表 python
JZ16 合并两个排序的链表my versionclass ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: # 返回合并后列表 def Merge(self, pHead1, pHead2): pHead = ListNode(-1) p = pHead while pHead1 and p原创 2021-08-26 00:39:06 · 208 阅读 · 0 评论 -
JZ15 反转链表 python
JZ15 反转链表my versionclass ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: # 返回ListNode def ReverseList(self, pHead): if pHead: p = pHead pp = pHead # 要插入的节点原创 2021-08-26 00:26:12 · 159 阅读 · 0 评论 -
JZ55 链表中环的入口结点 python
JZ55 链表中环的入口结点my versionclass ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def EntryNodeOfLoop(self, pHead): p = pHead l = [] while p.next: l.append((p.val, p原创 2021-08-25 23:20:35 · 118 阅读 · 0 评论 -
JZ14 链表中倒数最后k个结点 python
JZ14 链表中倒数最后k个结点my versionclass ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def FindKthToTail(self , pHead , k ): # write code here length = 0 p = pHead原创 2021-08-25 18:45:22 · 102 阅读 · 0 评论 -
JZ13 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分my version快速排序的四种写法错误记录在函数里要交换数组里的值需要将数组的地址也传过去class Solution: def swap(self, a, i, j): a[i] = a[i]^a[j] a[j] = a[i]^a[j] a[i] = a[i]^a[j] def reOrderArra原创 2021-08-22 22:26:28 · 56 阅读 · 0 评论 -
JZ53 表示数值的字符串 python
JZ53 表示数值的字符串描述请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。科学计数法的数字(按顺序)可以分成以下几个部分:1.若干空格2.一个整数或者小数3.(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个整数(可正可负)4.若干空格小数(按顺序)可以分成以下几个部分:1.若干空格2.(可选)一个符号字符(’+’ 或 ‘-’)3. 可能是以下描述格式之一:3.1 至少一位数字,后面跟着一个点 ‘.’3.2 至少一位数字,后面跟着一个点 ‘.’原创 2021-08-22 17:47:23 · 79 阅读 · 0 评论 -
JZ52 正则表达式匹配 python
JZ52 正则表达式匹配my version错误记录“aaa”,“a*a” 未通过“” , “.*” 未通过“”,"." 未通过“a”,".*" 未通过“ab”,".*" 未通过class Solution: def match(self , string , pattern ): p_string = 0 p_pattern = 0 while p_string < len(string): if原创 2021-08-21 23:39:49 · 80 阅读 · 0 评论 -
JZ56 删除链表中重复的结点 python
JZ56 删除链表中重复的结点错误记录1->1->2 头节点可能被删除1->1->2->21->1->2->3->3->4->5->5class Solution: def find_no_repeat(self, node): p = node if p and p.next: if p.val != p.next.val:原创 2021-08-20 23:29:11 · 150 阅读 · 0 评论 -
JZ12 数值的整数次方 python
JZ12 数值的整数次方注意考虑特殊情况,如exponent为负数my versionclass Solution: def Power(self, base, exponent): if exponent < 0: exponent = -exponent ex_flag = 1 else: ex_flag = 0# if base == exponent ==原创 2021-08-20 13:30:45 · 111 阅读 · 0 评论 -
JZ11 二进制中1的个数 python
JZ11 二进制中1的个数my version未通过所有样例,内存超过限制内存class Solution: def NumberOf1(self, n): if n >= 0: symbol = 0 else: symbol = 1 binary = [] while n: binary.append(n % 2) n = n原创 2021-08-19 23:47:06 · 111 阅读 · 0 评论 -
JZ67 剪绳子 python
JZ67 剪绳子book method1动态规划求一个问题的最优解整体问题的最优解依赖于各个子问题的最优解子问题之间存在互相重叠的更小的子问题从上往下分析,从下往上求解问题设有长度为n的绳子,则第一刀可以切在第i处,0<i<n,则f(n)=max(f(i)∗f(n−i))f(n) = max(f(i)*f(n-i))f(n)=max(f(i)∗f(n−i))从小开始分析n=0,1时f(n)=0,n=2时f(n)=1,n=3时f(n)=2class Solution:原创 2021-08-19 20:24:15 · 165 阅读 · 0 评论 -
JZ66 机器人的运动范围 python
JZ66 机器人的运动范围my versiondfs错误记录a = b = [x for x in range(n)] 会使a、b指向同一空间由于机器人从[0,0]开始运动,因此只有向右和向下两个方向可以走class Solution: def dfs(self, i, j, thre, rows, cols):# print(i,j) if i<0 or i>=rows or j<0 or j>=cols or self.原创 2021-08-17 22:10:24 · 156 阅读 · 0 评论 -
JZ65 矩阵中的路径 python
JZ65 矩阵中的路径book method回溯算法我们看到他是从矩形中的一个点开始往他的上下左右四个方向查找,这个点可以是矩形中的任何一个点,所以代码的大致轮廓我们应该能写出来,就是遍历矩形所有的点,然后从这个点开始往他的4个方向走,因为是二维数组,所以有两个for循环。每一个点我们都可以往他的4个方向查找,所以我们可以把它想象为一棵4叉树,就是每个节点有4个子节点,而树的遍历我们最容易想到的就是递归。DFShttps://zhuanlan.zhihu.com/p/355968635cl原创 2021-08-17 21:08:51 · 142 阅读 · 0 评论 -
JZ6 旋转数组的最小数字 python
JZ6 旋转数组的最小数字my version时间复杂度O(n)错误记录特殊样例:数组未进行旋转如[1,2,3] 找最小 1class Solution: def minNumberInRotateArray(self, rotateArray): if rotateArray: for i in range(1, len(rotateArray)): if rotateArray[i-1]>rotateA原创 2021-08-16 20:36:15 · 117 阅读 · 0 评论 -
JZ10 矩形覆盖
JZ10 矩形覆盖用一个21的小矩形去覆盖2n大矩形时有两种选择,靠左放竖着放->剩余2*(n-1)的矩形需要覆盖横着放->必须再选择一块横着放,剩余2*(n-2)的矩形需要覆盖即f(n)=f(n-1)+f(n-2) 转化为斐波那契数列问题class Solution: def rectCover(self, number): if number <= 2: return number else:原创 2021-08-12 18:33:05 · 92 阅读 · 0 评论 -
JZ8 跳台阶 JZ9 跳台阶扩展问题 python
JZ8 跳台阶如果只有一级台阶,则只有一种跳法,若有两级台阶,则有两种跳法(1 一次跳一级,跳两次;2 一次跳两级,跳两次)把n级台阶的跳法看作n的函数记为f(n)若第一次跳一级,则后面的跳法为f(n-1)种若第一次跳两级,则后面的跳法为f(n-2)种所以跳n级台阶共有f(n) = f(n-1)+f(n-2)种跳法,为斐波那契数列class Solution: def jumpFloor(self, number): if number <=2:原创 2021-08-12 17:33:07 · 147 阅读 · 0 评论