随笔分类 - 数据结构和算法
摘要:我的方法很简单,使用str函数首先将int转化为str,然后将str放到一个栈当中进行栈的反转,最后对该栈进行处理,比如去掉0或者添加数字前面的"-"号,处理完之后将栈中的字符串拼接起来得到返回值即可,代码如下: class Solution: def reverse(self, x: int) -
阅读全文
摘要:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0
阅读全文
摘要:题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 解题思路: 我们随便构造一个二叉搜索树,看看有什么规律,假设我们构造了如下图所示这样的二叉树,则有: 那么我们后序遍历的结果则是:[ 1,4,
阅读全文
摘要:题目解析: 利用递归的代码如下: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None
阅读全文
摘要:题目: 题目解析: 这个题目和之前我们做的稍微有一点不一样,需要我们在函数里面再写一个函数才能够进行递归,因为想要使用递归那么我们一定需要写出一个递进关系的表达式,而这个表示只通过一个传入参数root是不能够完成的,需要有两个传入参数才能够进行比较二叉树的两边是否对称,我们通过这个新的函数将传入的一
阅读全文
摘要:题目: 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 题目解析: 方法一: 这个题目很明显就可以用递归来做,有关树的题目用递归来做基本上是我们需要想到的首选!如果两个树是相同的,我们只需要比较其树根是相同的,同时递归调用比较树根
阅读全文
摘要:题目: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 解题思路: 直接使用递归,也就是整体法进行编写,假设其中第一个链表的数字比另一个数小,则将后面的两个链表使用
阅读全文
摘要:动态规划就是把一系列问题拆分成一个一个的子问题的过程 ,例如我们的斐波那契数列问题,可以从最后一个序列的加减法看起,这样就可以使用递归得到最后的结果了。 除了斐波那契数列,我们还有什么问题也是dp的问题呢? 问题:给定一个n,找到不同的n将其写成1,3,4相加的方法。 当n=5时,答案是6,一共有6
阅读全文
摘要:题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解题思路: 这个题目其实非常基础了,也就是直接使用BFS广度优先搜索算法对整棵二叉树进行遍历即可,我们最后返回的是一个数组 "[]",把遍历之后的元素放到这个数组当中即可。为了进行BFS,我们首先新建一个队列,将树根部的节点放到队列里
阅读全文
摘要:题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 题目解析: 这个题目有两个解法,都运用了递归的思想,在二叉树当中使用递归一般都要
阅读全文
摘要:题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 题目解析 这个题目很明显可以使用递归来做,我们只需要判断其子数的结构是不是相同的就行了,这里也编写了两个函数。代码如下: # -*- coding:utf-8 -*- # class TreeNod
阅读全文
摘要:我们先建立一棵简单的二叉树: 代码如下所示: class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None l1 = TreeNode(1) l2 = TreeNode(2) l3 = T
阅读全文
摘要:在数据结构当中一个很重要的结构则是树了,那么树的先序,中序,后序遍历是怎么进行起来的呢? 一.先序遍历 先序遍历是最简单的,也就是使用深度优先搜索(DFS)算法在树当中进行遍历,我们首先在树的左端走到底,在往下走的时候,没遇到一个节点就打印出来,直到走到底之后再向上返回,如果遇到已经打印,也就是走过
阅读全文
摘要:题目描述 输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 题目解析: 这道题是什么意思呢?如下图所示: 其中上面的为第一个链表,下面的为第二个链表,它们的公共结点指的就是它们结合之处的那个共同的节点。我们可以先将两个
阅读全文
摘要:题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 解题思路分析: 这两个链表都是单调递增的,合并这两个链表的意思是将这两个链表全部打乱后,再根据从小到大的顺序进行重新指向,最后得到一个新的链表,我们可以直接使用递归的方法来做这个题目,代码如下:
阅读全文
摘要:题目描述 输入一个链表,反转链表后,输出新链表的表头。 题目解析: 这个题目的题意其实非常简单,最开始我们的链表的指向是这样的: 将其改变反向,变成如下所示的方向即可: 可以看到最开始我们的表头指向了None,然后表尾却指向了倒数第二个链表,中间的链表指向全部反向,这也就是这个题目要让我们干的事情。
阅读全文
摘要:题目描述 输入一个链表,输出该链表中倒数第k个结点。 解题思路: 这个题目也延续了剑指offer题目当中信息不给全的传统,其中代码当中的第一个参数head表示链表的表头Node,k表示的是一个数字。我们只需要遍历所有Node,将这些Node放进一个栈当中即可(用列表来代替栈),然后找到栈当中的倒数第
阅读全文
摘要:题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 解题思路: 这个题目没有说清楚到底返回的是什么,在代码当中传入进来的值是一个Node对象,也就是链表当中的一个节点,它具有两个值,一个值是它本身所具有的值,另外一个值则是它所指向的下一个节点的地址,我们只要通过利用这个next
阅读全文
摘要:链表这个数据结构在我们做题时非常常见,链表上的每一个元素都包含了两个值,一个值是自身的值,另外一个值则是指向下一个元素的地址,这样一整个链表才能够串连起来。如下所示: 其中第一个为单链表,每一个元素都指向了下一个元素,最后一个元素指向了None。 第二个为循环链表,也是每一个元素都指向了下一个元素,
阅读全文
摘要:题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长
阅读全文

浙公网安备 33010602011771号