自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 280

原创 《leetcode-go》二叉树根节点到叶子节点的所有路径和

给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。 例如根节点到叶子节点的一条路径是,那么这条路径就用来代替。 找出根节点到叶子节点的所有路径表示的数字之和 package main import . "nc_tools" /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /** * * @param root Tree..

2021-10-10 11:36:16 552

原创 《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 320

原创 《leetcode-go》判断回文串

判断题目给出的字符串是不是回文,仅考虑字符串中的字母字符和数字字符,并且忽略大小写 例如:"nowcoder Is Best tsebsi: redoc won"是回文 "race a car"不是回文 注意: 你有没有考虑过字符串可能为空?这是面试时应该提出的一个好问题。 针对这个问题,我们定义空字符串是回文 思路:遍历字符串判断首位对应位置是否相等即可,注意空字符串 package main import "strings" /** * * @param s string字符串

2021-10-10 10:55:53 261

原创 《leetcode-go》二叉树的最大路径和

给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。 这个路径的开始节点和结束节点可以是二叉树中的任意节点 思路:递归处理每个节点作为开始的最大路径和,如果>0,则下面保留,如果<0,则最大就是这个节点自己。 package main /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /** * * @param root TreeNo

2021-10-10 10:49:11 259

原创 《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 147

原创 《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 203

原创 《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 204

原创 《leetcode-go》判断二叉树是否为平衡二叉树

判断给定的二叉树是否是平衡二叉树 平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1。 一颗树的高度指的是树的根节点到所有节点的距离中的最大值。 思路:判断每个节点的深度,左右节点进行比较,深度遍历来实现 package main /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /** * * @param roo.

2021-10-10 10:27:54 243

原创 《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 141

原创 《leetcode-go》将升序数组转化为平衡二叉搜索树

给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST). 思路:无非就是取中间作为根节点,然后左右两边递归调用即可 package main import . "nc_tools" /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /** * * @param num int整型一维数组 * @return TreeNode类 */ func so

2021-09-06 10:28:22 208

原创 《leetcode-go》二叉树层序遍历 ii

给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 该二叉树由底层到顶层层序遍历的结果是 [[15,7],[9,20],[3]] 思路:正向遍历然后加了个一个逆转的结果。 package main import . "nc_tools" /* * type TreeNode struct { *...

2021-09-05 19:57:23 170

原创 《leetcode-go》从前序和中序遍历构造二叉树

给出一棵树的前序遍历和中序遍历,请构造这颗二叉树 注意: 可以假设树中不存在重复的节点 思路:前序遍历的第一个值是根节点,根据前序遍历的根节点分割中序遍历的左右两部分,然后遍历即可。 package main import . "nc_tools" /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /** * * @param preorder int整

2021-09-05 19:44:49 229

原创 《leetcode-go》从中序和后序遍历构造二叉树

给出一棵树的中序遍历和后序遍历,请构造这颗二叉树 注意: 保证给出的树中不存在重复的节点 思路:可以根据后序遍历获取跟节点,然后根据根节点把中序遍历分割为左右两部分,然后根据中序遍历的左右两部分,来分割后序的左右两部分,然后递归处理即可。 package main import . "nc_tools" /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /**

2021-09-05 19:26:22 171

原创 《leetcode-go》二叉树的最大深度

求给定二叉树的最大深度, 最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。 思路:递归调用,获取左右节点的深度,取最大值+1作为当前节点的深度. package main import . "nc_tools" /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /** * * @param root TreeNode类 * @return

2021-09-05 19:13:59 136

原创 《leetcode-go》求二叉树的层序遍历

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], [15,7] ] 思路:用一个树节点栈来存储每一层的节点,下一层的节点就是这些节点出栈把他们的子节点再写入这个切片,根据每一层的数量来控制层次的节点分割 package main import . "nc_tools" /* * type TreeNode struct { * Val int

2021-09-05 18:00:41 191

原创 《leetcode-go》判断二叉树是否对称

给定一棵二叉树,判断其是否是自身的镜像(即:是否对称) 例如:下面这棵二叉树是对称的 1 / \ 2 2 / \ / \ 3 4 4 3 下面这棵二叉树不对称。 1 / \ 2 2 \ \ 3 3 备注: 希望你可以用递归和迭代两种方法解决这个问题 思路:左分支的左节点和右分支的右节点比较,左分支的右节点和右分支的左节点比较 package main import . "nc_tools" /* * type TreeNode struct { * Val i...

2021-09-05 17:43:48 231

原创 《leetcode-go》判断二叉树是否相等

给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。 判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值。 思路:遍历两个树,判断值是否相等 package main import . "nc_tools" /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /** * * @param p TreeNode类 * @p

2021-09-05 17:21:17 263

原创 《leetcode-go》判断二叉搜索树

判断给出的二叉树是否是一个二叉搜索树(BST) 二叉搜索树的定义如下 一个节点的左子树上节点的值都小于自身的节点值 一个节点的右子树上节点的值都大于自身的节点值 所有节点的左右子树都必须是二叉搜索树 如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读 我们用如下方法将二叉树序列化: 二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。 例如: 1 / \ 2 3 / 4 \ 5 上述的...

2021-09-05 17:15:39 223

原创 《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 587

原创 《leetcode-go》不同的二叉搜索树 ii

给定一个值n,请生成所有的存储值1...n.的二叉搜索树(BST)的结构 例如: 给定n=3,你的程序应该给出下面五种不同的二叉搜索树(BST) 思路:跟前面一样,确定根节点,然后递归获取左右节点,不同的是需要输出树,要对每一个树的每一个位置都生成一个新的树节点,然后进行对应的子节点拼接。结束的位置就是如果没有数字了,就返回一个nil作为子节点。 package main import . "nc_tools" /* * type TreeNode struct { * Val int

2021-09-05 16:34:53 115

原创 《leetcode-go》不同的二叉搜索树

给定一个值n,能构建出多少不同的值包含1...n的二叉搜索树(BST)? 例如 给定 n= 3, 有五种不同的二叉搜索树(BST) 思路:指定头结点,递归调用判断下面还有中方式。如果元素个数是1或者0,直接返回1 func 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 142

原创 《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 214

原创 《leetcode-go》链表内指定区间反转

将一个链表m位置到n位置之间的区间反转,要求时间复杂度,空间复杂度。 例如: 给出的链表为,, 返回. 注意: 给出的,满足以下条件: 思路:找到m的位置,开始反转链表,跟普通反转链表不同的是,他需要记录m的前一个位置,方便把m-n这部分的头拼接上,还需要记录n的后一个位置,把这个链表的尾接上,防止head发生变化,新建一个新的head。 package main import . "nc_tools" /* * type ListNode struct{ * Val int...

2021-09-04 22:11:29 416

原创 《leetcode-go》解密

一条仅包含字母‘A’-‘Z’的消息用下列的方式加密成数字 'A' -> 1 'B' -> 2 ... 'Z' -> 26 现在给出加密成数字的密文,请判断有多少种解密的方法 例如: 给出的密文为“13”,可以解密为"AC"(1 3) 或者"M"(13). 所以密文"13"的解密方法是2种. 思路:判断每个位置可以有多少种解法,每个位置的解法=前一个位置的解法+当两位<26的时候前两位的解法 package main import "strconv" func num

2021-09-04 22:00:20 373

原创 《leetcode-go》合并两个有序的数组

给出一个整数数组 A和有序的整数数组B,请将数组B合并到数组A中,变成一个有序的升序数组 注意: 1.可以假设A数组有足够的空间存放B数组的元素, A和B中初始的元素数目分别为 m和n,A的数组空间大小为 m+n 2.不要返回合并的数组,返回是空的,将数组 B的数据合并到A里面就好了 3.A数组在[0,m-1]的范围也是有序的 例1: A:[4,5,6,0,0,0],m=3 B: [1,2,3],n=3 合并过后A为: A: [1,2,3,4,5,6] 思路:从后往前填,...

2021-09-04 21:52:36 272

原创 《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 188

原创 《leetcode-go》划分链表

给出一个长度为 n的单链表和一个值x ,请返回一个链表的头结点,要求新链表中小于x 的节点全部在大于等于x的节点左侧,并且两个部分之内的节点之间与原来的链表要保持相对顺序不变。 复杂度要求: 时间 O(n) 空间 O(1) 思路:新建一个比x小的部分的头,再建一个比x大的部分的头,然后遍历把他们分别放到小的部分和大的部分。然后两个部分连起来。返回小的头的next。 package main import . "nc_tools" /* * type ListNode struct...

2021-09-04 21:17:34 182

原创 《leetcode-go》直方图中的最大矩形

给出n个数字,代表直方图的条高,直方图每一条的宽度为1,请计算直方图中最大矩形的面积. 思路1:采用一个栈来存高度,生成一个单调递增的栈,如果高度比栈里的最后一个元素小,就需要对前面进行结算。出栈计算比当前值大的值对应面积,宽就是一个从0开始自增的cnt。当比当前元素高的出栈之后,用当前元素值一样的塞进去,这样就是一个单增的栈,遍历结束之后,出栈计算最大面积即可。 思路2:可以搞一个二维数组,然后计算每一个高度他存在的最大宽度,也就是记录他的最左和最右。最后遍历求最大面积就可以了 package

2021-08-30 09:23:48 190

原创 《leetcode-go》删除有序链表中重复的元素-II

给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。 例如: 给出的链表为1-》2-》3-》3-》3-》4-》4-》5, 返回1-》2-》5. 思路:跟前后节点都不相同的节点留下,否则从链表中去掉。需要一个全新的头节点,防止头结点被去掉了。 package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /** *

2021-08-29 15:49:43 236

原创 《leetcode-go》删除有序链表中重复的元素-I

删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次 例如: 给出的链表为1-》1-》2,返回1-》2. 给出的链表为1-》1-》2-》3-》3,返回1-》2-》3. 思路:遍历链表,记录上一个节点,如果当前节点跟前一个节点相同,则把这个节点从链表中摘除。 package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /**

2021-08-29 15:44:39 248

原创 《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 155

原创 《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 336

原创 《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 126

原创 《leetcode-go》最小覆盖子串

给出两个字符串 S和T,要求在O(n)的时间复杂度内在S中找出最短的包含T中所有字符的子串。 例如: S="XDOYEZODEYXNZ" T="XYZ" 找出的最短子串为"YXNZ". 注意: 如果 S中没有包含T 中所有字符的子串,返回空字符串 “”; 满足条件的子串可能有很多,但是题目保证满足条件的最短的子串唯一。 思路:记录开始和结束位置,当结束位置之内T中的字符全部存在,那么结束位置结束,开始位置向前,如果开始位置到达一个位置之后,去掉这个字符,T中某一个字符缺少,就记录这个从开...

2021-08-29 14:44:02 390

原创 《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 143

原创 《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 154

原创 《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 84

原创 《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 161

原创 《leetcode-go》二级制求和

给出两个用字符串表示的二进制数,返回他们的和(也用字符串表示) 例如: a ="11" b ="1" 返回"100". 思路:字符串按位转化为数字,然后从低位开始,求出结果根据二进制判断是否进1,然后结果依次拼接。注意两个字符串的长短差异。 package main import ( "strconv" "strings" ) /** * * @param a string字符串 * @param b string字符串 * @return string字符串 */ f

2021-08-27 09:16:49 133

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除