- 博客(380)
- 收藏
- 关注
原创 《leetcode-go》 分割回文串
给出一个字符串s,分割s使得分割出的每一个子串都是回文串计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s="aab",返回1,因为回文分割结果["aa","b"]是切割一次生成的。package main/** * * @param s string字符串 * @return int整型*/func minCut( s string ) int { // write code here cnt := make(map[int]int)
2021-10-10 11:50:10
215
原创 《leetcode-go》二叉树根节点到叶子节点的所有路径和
给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是,那么这条路径就用来代替。找出根节点到叶子节点的所有路径表示的数字之和package mainimport . "nc_tools"/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param root Tree..
2021-10-10 11:36:16
462
原创 《leetcode-go》最长的连续元素序列长度
给定一个无序的整数类型数组,求最长的连续元素序列的长度。例如:给出的数组为[1000, 4, 2000, 1, 3, 2],最长的连续元素序列为[1, 2, 3, 4].返回这个序列的长度:4你需要给出时间复杂度在O(n)之内的算法思路:用一个map存储数据,并且记录最小值和最大值,再遍历判断即可package main/** * * @param num int整型一维数组 * @return int整型*/func longestConsecutive.
2021-10-10 11:33:52
258
原创 《leetcode-go》判断回文串
判断题目给出的字符串是不是回文,仅考虑字符串中的字母字符和数字字符,并且忽略大小写例如:"nowcoder Is Best tsebsi: redoc won"是回文"race a car"不是回文注意:你有没有考虑过字符串可能为空?这是面试时应该提出的一个好问题。针对这个问题,我们定义空字符串是回文思路:遍历字符串判断首位对应位置是否相等即可,注意空字符串package mainimport "strings"/** * * @param s string字符串
2021-10-10 10:55:53
203
原创 《leetcode-go》二叉树的最大路径和
给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。这个路径的开始节点和结束节点可以是二叉树中的任意节点思路:递归处理每个节点作为开始的最大路径和,如果>0,则下面保留,如果<0,则最大就是这个节点自己。package main/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param root TreeNo
2021-10-10 10:49:11
179
原创 《leetcode-go》不同的子序列
给定两个字符串S和T,返回S子序列等于T的不同子序列个数有多少个?字符串的子序列是由原来的字符串删除一些字符(也可以不删除)在不改变相对位置的情况下的剩余字符(例如,"ACE"is a subsequence of"ABCDE"但是"AEC"不是)例如:S="nowcccoder", T = "nowccoder"返回3思路:动态规划,记录S的0-第i个字符串可以构成T的0到第j个字符串的个数,如果S第i个字符==T的第j个字符,那么A[i][j]=A[i-1][j-1]+A[i-1][j
2021-10-10 10:44:21
107
原创 《leetcode-go》二叉树中是否存在节点和为指定值的路径
给定一个二叉树和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径思路:深度遍历,存下路径下来的和就可以了,到叶子节点判断是否相等package main/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param root TreeNode类 * @param sum int整型 * @ret
2021-10-10 10:34:32
140
原创 《leetcode-go》二叉树根节点到叶子节点和为指定值的路径
给定一个节点数为 n 的二叉树和一个值 sum ,请找出所有的根节点到叶子节点的节点值之和等于的路径,如果没有则返回空。思路:递归获取路径和即可,用一个栈来存储路径上的节点即可,后进先出。package main/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param root TreeNode类 * @param sum
2021-10-10 10:32:10
143
原创 《leetcode-go》判断二叉树是否为平衡二叉树
判断给定的二叉树是否是平衡二叉树平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1。一颗树的高度指的是树的根节点到所有节点的距离中的最大值。思路:判断每个节点的深度,左右节点进行比较,深度遍历来实现package main/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param roo.
2021-10-10 10:27:54
180
原创 《leetcode-go》有序链表变成二叉搜索树
给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)package main/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//* * type ListNode struct{ * Val int * Next *ListNode * } *//** * * @param head ListNode类 *
2021-10-10 10:23:07
100
原创 《leetcode-go》将升序数组转化为平衡二叉搜索树
给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST).思路:无非就是取中间作为根节点,然后左右两边递归调用即可package mainimport . "nc_tools"/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param num int整型一维数组 * @return TreeNode类*/func so
2021-09-06 10:28:22
149
原创 《leetcode-go》二叉树层序遍历 ii
给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},3 / \ 9 20 / \ 15 7该二叉树由底层到顶层层序遍历的结果是[[15,7],[9,20],[3]]思路:正向遍历然后加了个一个逆转的结果。package mainimport . "nc_tools"/* * type TreeNode struct { *...
2021-09-05 19:57:23
126
原创 《leetcode-go》从前序和中序遍历构造二叉树
给出一棵树的前序遍历和中序遍历,请构造这颗二叉树注意:可以假设树中不存在重复的节点思路:前序遍历的第一个值是根节点,根据前序遍历的根节点分割中序遍历的左右两部分,然后遍历即可。package mainimport . "nc_tools"/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param preorder int整
2021-09-05 19:44:49
174
原创 《leetcode-go》从中序和后序遍历构造二叉树
给出一棵树的中序遍历和后序遍历,请构造这颗二叉树注意:保证给出的树中不存在重复的节点思路:可以根据后序遍历获取跟节点,然后根据根节点把中序遍历分割为左右两部分,然后根据中序遍历的左右两部分,来分割后序的左右两部分,然后递归处理即可。package mainimport . "nc_tools"/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//**
2021-09-05 19:26:22
123
原创 《leetcode-go》二叉树的最大深度
求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。思路:递归调用,获取左右节点的深度,取最大值+1作为当前节点的深度.package mainimport . "nc_tools"/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param root TreeNode类 * @return
2021-09-05 19:13:59
98
原创 《leetcode-go》求二叉树的层序遍历
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树层序遍历的结果是[[3],[9,20],[15,7]]思路:用一个树节点栈来存储每一层的节点,下一层的节点就是这些节点出栈把他们的子节点再写入这个切片,根据每一层的数量来控制层次的节点分割package mainimport . "nc_tools"/* * type TreeNode struct { * Val int
2021-09-05 18:00:41
145
原创 《leetcode-go》判断二叉树是否对称
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)例如:下面这棵二叉树是对称的1/ \2 2/ \ / \3 4 4 3下面这棵二叉树不对称。1/ \2 2\ \3 3备注:希望你可以用递归和迭代两种方法解决这个问题思路:左分支的左节点和右分支的右节点比较,左分支的右节点和右分支的左节点比较package mainimport . "nc_tools"/* * type TreeNode struct { * Val i...
2021-09-05 17:43:48
162
原创 《leetcode-go》判断二叉树是否相等
给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值。思路:遍历两个树,判断值是否相等package mainimport . "nc_tools"/* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } *//** * * @param p TreeNode类 * @p
2021-09-05 17:21:17
193
原创 《leetcode-go》判断二叉搜索树
判断给出的二叉树是否是一个二叉搜索树(BST)二叉搜索树的定义如下一个节点的左子树上节点的值都小于自身的节点值 一个节点的右子树上节点的值都大于自身的节点值 所有节点的左右子树都必须是二叉搜索树如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读我们用如下方法将二叉树序列化:二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。例如: 1 / \ 2 3 / 4 \ 5上述的...
2021-09-05 17:15:39
156
原创 《leetcode-go》数字字符串转化成IP地址
现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525522135",返回["255.255.22.135", "255.255.221.35"]. (顺序没有关系)思路:需要判断是否每一位是否<255,大于的直接跳过,指定第一位i是从0到2,然后指定第二位j是从i+1到i+3,然后指定第三位k是j+1到j+3,最后判断第四位就确定下来了,每一位都可以先判断是不是超过了255,超过了就不是想要的结果package mai
2021-09-05 16:52:50
512
原创 《leetcode-go》不同的二叉搜索树 ii
给定一个值n,请生成所有的存储值1...n.的二叉搜索树(BST)的结构例如:给定n=3,你的程序应该给出下面五种不同的二叉搜索树(BST)思路:跟前面一样,确定根节点,然后递归获取左右节点,不同的是需要输出树,要对每一个树的每一个位置都生成一个新的树节点,然后进行对应的子节点拼接。结束的位置就是如果没有数字了,就返回一个nil作为子节点。package mainimport . "nc_tools"/* * type TreeNode struct { * Val int
2021-09-05 16:34:53
90
原创 《leetcode-go》不同的二叉搜索树
给定一个值n,能构建出多少不同的值包含1...n的二叉搜索树(BST)?例如给定 n= 3, 有五种不同的二叉搜索树(BST)思路:指定头结点,递归调用判断下面还有中方式。如果元素个数是1或者0,直接返回1func numTrees(n int) int { // write code here var num []int for i := 1; i <= n; i++ { num = append(num, i) } return GetTreeNum(num).
2021-09-04 22:43:33
93
原创 《leetcode-go》交织的字符串
给出三个字符串s1,s2,s3,判断s3是否可以由s1和s2交织而成。例如:给定s1="xxyzz",s2="pyyzx",如果s3="xxpyyzyzxz", 返回true如果s3="xxpyyyxzzz", 返回false思路:记录i个s1和j个s2是否可以组成i+j个s3,就是判断s1的第i个字符是否等于s3第i+j+1个字符并且i-1个s1和j个s2可以构成i+j-1个s3,或者是s2的第j个字符是否等于s3第i+j+1个字符并且i个s1和j-1个s2可以构成i...
2021-09-04 22:34:45
136
原创 《leetcode-go》链表内指定区间反转
将一个链表m位置到n位置之间的区间反转,要求时间复杂度,空间复杂度。例如:给出的链表为,,返回.注意:给出的,满足以下条件:思路:找到m的位置,开始反转链表,跟普通反转链表不同的是,他需要记录m的前一个位置,方便把m-n这部分的头拼接上,还需要记录n的后一个位置,把这个链表的尾接上,防止head发生变化,新建一个新的head。package mainimport . "nc_tools"/* * type ListNode struct{ * Val int...
2021-09-04 22:11:29
347
原创 《leetcode-go》解密
一条仅包含字母‘A’-‘Z’的消息用下列的方式加密成数字'A' -> 1'B' -> 2...'Z' -> 26现在给出加密成数字的密文,请判断有多少种解密的方法例如:给出的密文为“13”,可以解密为"AC"(1 3) 或者"M"(13).所以密文"13"的解密方法是2种.思路:判断每个位置可以有多少种解法,每个位置的解法=前一个位置的解法+当两位<26的时候前两位的解法package mainimport "strconv"func num
2021-09-04 22:00:20
292
原创 《leetcode-go》合并两个有序的数组
给出一个整数数组 A和有序的整数数组B,请将数组B合并到数组A中,变成一个有序的升序数组注意:1.可以假设A数组有足够的空间存放B数组的元素, A和B中初始的元素数目分别为 m和n,A的数组空间大小为 m+n2.不要返回合并的数组,返回是空的,将数组 B的数据合并到A里面就好了3.A数组在[0,m-1]的范围也是有序的例1:A:[4,5,6,0,0,0],m=3B: [1,2,3],n=3合并过后A为:A: [1,2,3,4,5,6]思路:从后往前填,...
2021-09-04 21:52:36
216
原创 《leetcode-go》搅乱字符串
题目给出一个字符串s1,我们可以用递归的方法将字符串分成两个非空的子串来将s1表示成一个二叉树下面是s1=“coder”的一种二叉树的表现形式:coder/ \co der/ \ / \c o d er/ \e r将字符串乱序的方法是:选择任意的非叶子节点,交换它的两个孩子节点。例如:如果我们选择节点“co”交换他的两个孩子节点,就会产生一个乱序字符串"ocder".ocder / \ oc ...
2021-09-04 21:33:03
153
原创 《leetcode-go》划分链表
给出一个长度为 n的单链表和一个值x ,请返回一个链表的头结点,要求新链表中小于x 的节点全部在大于等于x的节点左侧,并且两个部分之内的节点之间与原来的链表要保持相对顺序不变。复杂度要求:时间 O(n)空间 O(1)思路:新建一个比x小的部分的头,再建一个比x大的部分的头,然后遍历把他们分别放到小的部分和大的部分。然后两个部分连起来。返回小的头的next。package mainimport . "nc_tools"/* * type ListNode struct...
2021-09-04 21:17:34
147
原创 《leetcode-go》直方图中的最大矩形
给出n个数字,代表直方图的条高,直方图每一条的宽度为1,请计算直方图中最大矩形的面积.思路1:采用一个栈来存高度,生成一个单调递增的栈,如果高度比栈里的最后一个元素小,就需要对前面进行结算。出栈计算比当前值大的值对应面积,宽就是一个从0开始自增的cnt。当比当前元素高的出栈之后,用当前元素值一样的塞进去,这样就是一个单增的栈,遍历结束之后,出栈计算最大面积即可。思路2:可以搞一个二维数组,然后计算每一个高度他存在的最大宽度,也就是记录他的最左和最右。最后遍历求最大面积就可以了package
2021-08-30 09:23:48
147
原创 《leetcode-go》删除有序链表中重复的元素-II
给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1-》2-》3-》3-》3-》4-》4-》5, 返回1-》2-》5.思路:跟前后节点都不相同的节点留下,否则从链表中去掉。需要一个全新的头节点,防止头结点被去掉了。package mainimport . "nc_tools"/* * type ListNode struct{ * Val int * Next *ListNode * } *//** *
2021-08-29 15:49:43
185
原创 《leetcode-go》删除有序链表中重复的元素-I
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次例如:给出的链表为1-》1-》2,返回1-》2.给出的链表为1-》1-》2-》3-》3,返回1-》2-》3.思路:遍历链表,记录上一个节点,如果当前节点跟前一个节点相同,则把这个节点从链表中摘除。package mainimport . "nc_tools"/* * type ListNode struct{ * Val int * Next *ListNode * } *//**
2021-08-29 15:44:39
216
原创 《leetcode-go》删除有序数组中重复的元素 ii
给定一个有序数组,删除其中部分元素,使得剩下的每个数最多出现2次。要求删除的数的数量尽可能少。例如:给出有序数组 A=[1,1,1,2,2,3],你给出的函数应该返回length =5, A 变为[1,1,2,2,3].思路:如果跟前面的相等,记录出现的次数,如果大于3,就不要了,继续往后循环,如果是求数量,比较容易,直接计算个数++即可。下面的代码,还可以返回最后的结果,还不需要额外的空间。在原来切片上存储,然后记录存储到哪位位置就行了package main/** * ..
2021-08-29 15:34:45
132
原创 《leetcode-go》集合的所有子集
现在有一个没有重复元素的整数集合S,求S的所有子集注意:你给出的子集中的元素必须按升序排列给出的解集中不能出现重复的元素思路:把前一个元素的所有集合带上这个元素,然后再加上之前所有的集合,就是当前这个位置所有的集合package main/** * * @param A int整型一维数组 * @return int整型二维数组*/func subsets( A []int ) [][]int { // write code here var set [][
2021-08-29 15:18:22
261
原创 《leetcode-go》组合
给出两个整数n和k,返回从1到n中取k个数字的所有可能的组合例如:如果n=4,k=2,结果为[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]思路:递归处理,每个数字有两种解决方案,要或者不要,指定数字开始的位置,需要的个数,递归调用获取结果package main/** * * @param n int整型 * @param k int整型 * @return int整型二维数组*/var
2021-08-29 15:04:46
101
原创 《leetcode-go》最小覆盖子串
给出两个字符串 S和T,要求在O(n)的时间复杂度内在S中找出最短的包含T中所有字符的子串。例如:S="XDOYEZODEYXNZ"T="XYZ"找出的最短子串为"YXNZ".注意:如果 S中没有包含T 中所有字符的子串,返回空字符串 “”;满足条件的子串可能有很多,但是题目保证满足条件的最短的子串唯一。思路:记录开始和结束位置,当结束位置之内T中的字符全部存在,那么结束位置结束,开始位置向前,如果开始位置到达一个位置之后,去掉这个字符,T中某一个字符缺少,就记录这个从开...
2021-08-29 14:44:02
308
原创 《leetcode-go》编辑距离
给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。你可以对一个单词执行以下3种操作:a)在单词中插入一个字符b)删除单词中的一个字符c)替换单词中的一个字符思路:画一个二维数组状态,表示i个word的字符变为j个需要多少步,字符相等的时候,n个字符变为m个字符需要的步数=(n-1个字符变为m-1个字符需要的步数 )不相等的时候,n个字符变为m个字符需要的步数=(n-1个字符变为m个字符 和 n个字符变为m-1个字符 和 n-1个字符变为m-1个字符
2021-08-29 14:35:19
110
原创 《leetcode-go》爬楼梯
你在爬楼梯,需要n步才能爬到楼梯顶部每次你只能向上爬1步或者2步。有多少种方法可以爬到楼梯顶部?思路:第n个位置是第n-1个位置和第n-2个位置的和。package main/** * * @param n int整型 * @return int整型*/func climbStairs( n int ) int { // write code here s := make(map[int]int) s[0] = 1 s[1] = 1 for i :
2021-08-29 14:11:33
116
原创 《leetcode-go》两数之和
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2思路:没有说是排序之后的,就需要正常遍历。或者是构建一个map,直接一次for循环即可,以空间换时间。package main/**.
2021-08-29 14:08:13
61
原创 《leetcode-go》加一
给出用数字数组表示的一个非负整数,请对该整数加1。思路:从最后一位开始计算,如果是9的话,就变成0,并且高位加1,如果不是,直接结束,最后需要判断最前面一位是不是0,是0的话需要增加一位1.package main/** * * @param digits int整型一维数组 * @return int整型一维数组*/func plusOne( digits []int ) []int { // write code here length := len(d
2021-08-29 14:03:20
131
原创 《leetcode-go》二级制求和
给出两个用字符串表示的二进制数,返回他们的和(也用字符串表示)例如:a ="11"b ="1"返回"100".思路:字符串按位转化为数字,然后从低位开始,求出结果根据二进制判断是否进1,然后结果依次拼接。注意两个字符串的长短差异。package mainimport ( "strconv" "strings")/** * * @param a string字符串 * @param b string字符串 * @return string字符串*/f
2021-08-27 09:16:49
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人