git链接
python和go可能会混着写,估计go会用的越来越多了
171.excel表序号
1.主要就是注意,直接使用range对字符串遍历,和使用下标遍历,一次取的长度是不同的
172.阶乘后的零
1.典型的规律题,每一对2和5会产生一个0,只要算出有多少对2和5即可。但是尬算肯定不是最优解。且由于2的倍数出现一定多于5的倍数,因此,计算出5的个数即可。
2.假设这个数为n,则n/5为5的倍数的个数,但是考虑到25这样的数的特殊性,多次除5,累加即可。
179.最大数
1.按字典序更靠前的数字放在更前面,规律就是这样。实现一个字典序比较器即可。
2.想的不对,是字符串a+b和b+a比较作为排序的要点
189.转轮数组
1.这题咋一看巨简单,切片重拼就行。第二种,双指针加个tmp变量。第三种暂时没想到
2.经过实际的做题尝试,第二种方法我想简单了。具体来说就是,在数组长度和k存在公约数的情况下,看起来数组就像分为了几个子小组,小组内进行了互换。用初始思路只能置换其中一个小组
3.第三种方法为3次翻转
204.计数质数
1.埃式筛法,具体见代码
crack.01.08.零矩阵
1.其实做过,相当于go语言再做一遍,提高熟练度
crack.01.09.字符串轮转
1.暴力异常简单。不暴力就借助KMP算法,之前手写过KMP,忘得差不多了已经,没必要在这个上死折腾hh
2.go的continue关键字挺有意思的
crack.02.01.移除重复节点
1.暴力解法,不增加额外空间的,有每遇到一个数就遍历一次进行断链的。也可以利用set统计出现的全部元素重建链表。进阶要求是不得使用临时缓冲区,那么方法一就可以实现
2.官方解用原链表短链生成,有点意思的。
crack.02.02.返回倒数第K个节点
crack.02.03.删除中间节点
这题因为不知道前向节点,没法使用断开的方式。一开始想的是依次把值往前传递,最后一个断开。看了个题解,直接把当前节点的值获取为下一个,然后把下一个断开就行了。
crack.02.04 分割链表
1.一开始想到了一个类似于位置交换的算法,题目也说了不需要保留位置。但是貌似需要一个特殊的递归,没想好怎么实现。
2.看了眼答案,麻了,原来就是拆分重组,毫无技术含量
3.初始犯了些蠢,比如newhead.next
crack.02.05 链表求和
1.很简单的遍历,没有节点了就继续用零顶替
2.尝试尽可能复用原本的节点,对于进位利用整数计算保留位数来实现
crack.02.06回文链表
1.首先想到的是递归,很久没写了有点生疏,看了波答案(干想毕竟也不会有啥收益)
2.答案还有个符合要求的,先反转后半段再快慢指针比较再转回去
crack.02.07 回文链表
1.经典题了,双指针交换,有相等的会相遇
crack.02.08 环路检测
1.如果不要求额外空间使用,倒是非常的简单,使用一个hashmap即可
2.使用快慢指针可以实现不使用额外空间,不写了就,曾经写过python版的。
crack.03.01 三合一
1.一个数组实现三个栈,其实就是长数组加三个指针,注意指针的范围即可。
crack.03.03 堆盘子
1.题目理解错了,popat是要出第几个栈,且出完以后不必移动后面的栈。
1004,最大连续1的个数III
1.面试遇到的,使用了贪心加回溯的方法。
2.最初版写法有两个问题,无法处理k给的过高从而使得k+1的个数比长度大的情况,无法处理k=0的
3.还是官方解好
crack.04.01 节点间通路
1.有一说一,直接看题解,我确实不会
2.DFS solution这个题解很详细。