随笔分类 - Leetcode
摘要:这个题不怎么容易。。 正常做两头只找大小写和数字。 用rex简单很多。。 java public class Solution { public boolean isPalindrome(String s) { int l = 0; s = s.trim().toLowerCase().replac
阅读全文
摘要:DFS+BACKTRACK 没弄些乱七八糟的符号什么的在test case算是脱离低级趣味了。 这个题就是正常的划分string,连二段brach都不是。 我只进行了最基础的剪枝,有很多剪枝条件,比如剩余string map1 = new HashMap(); Map map2 = new Hash
阅读全文
摘要:Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4]. Not
阅读全文
摘要:这个比一般的backtrack要难一点,有2个限制因素。 某个元素在某次递归中只能用一次。 重复。 主要就是这2个因素。 先SORT一下。 用visited[]记录哪个元素用过,用过直接跳过。 然后每个递归里,除了第一个元素之外,不许重复。 剩下的就是比较基础的backtrack了,记得每次要把vi
阅读全文
摘要:和strobogrammatic II一个做法。 算出range是几位数到几位数,比如50 100是2 3位,generate所有2和3位的所有可能,看看是不是在50 100之内,是的话res++... java public class Solution { int res = 0; public
阅读全文
摘要:好傻逼。。这个题麻烦死了。 简单的说,就是里面的O能想办法连到外面的O就不用被转换,否则就变为X。 需要2个额外的BOARD 一个记录VISIT 一个记录最后剩下的O 简单的说就是从最外面那圈开始,如果是O,就作为一个起点往上下左右找 很多情况都不用再找了: 找到X,到边(除了一开始),VISIT过
阅读全文
摘要:这个题一上来傻了。。 其实就一点,一个格只能被1个岛用,如果被用了,把它换成0就行了。 一开始把重心放在省时间,其实省不了,还往接水啊,最大矩形上想。。 老老实实遍历就完了。。
阅读全文
摘要:这个题有收获啊。。。。 前面不说了,MAP之后各遍历一次就行。 SORT之后可以用2个PTR从最左边开始,能提前结束。 排序之后的思路: 遍历smaller array,看看每个元素在大的里面能不能找到,找的话返还位置,用的二分查找INDEX,找到直接在大的里面从头修改就行了。最后返还修改的部分。
阅读全文
摘要:通刷的时候,破处在这个题上了。。记录一下吧。。 装逼1 PASS,失败。 老老实实MAP 2pass.. 话说JAVA的这个代码规则看着真乱。。我还是喜欢 这种括号格式 java public class Solution { public int firstUniqChar(String s) {
阅读全文
摘要:这题我记得一刷就卡过。二刷依然卡。。 4321这样的话,说明没有下一个了,就返还1234. 大多数情况是有下一个的,从右边开始找,找到第一个不是递增的地方,然后和右边遍历过的所有元素中,不小于他的最小元素交换。 交换之后,找到位置右边的所有数字必须变成递增,SORT一下就可以。 大概这么个思路,第一
阅读全文
摘要:distance = 1 表示改变一个字母使得2个字符串相等。改变可以是增加或者减少。。 分情况讨论。。 长度一样,长度相差1,长度相差大于1.。就这3种。。 java public class Solution { public boolean isOneEditDistance(String s
阅读全文
摘要:这个题做了很久。 一开始没审题,以为数组可以是任意数字,测了几个test case感觉答案是错的,才发现lower upper规定了数组内数字的范围。。这样简单一些。。 我是固定右边,移动左边,进行添加。。 其实不能算做出来,错了无数次,各种edge case完全想不到,改了又改改出个答案来。。 实
阅读全文
摘要:刷 July 13 2019 这个比一般的M难一点,好多要解决的地方 1 中间可1可2 2 DFS的permutation也不容易 3 用StringBuilder容易弄错,reverse()会导致回溯的时候没有恢复,毕竟setLength()只是恢复长度 Time: 遍历O(n) 统计 O(n)
阅读全文
摘要:traverse的时候要知道每个NODE是在第几列。 我用的方法是DFS,传入的时候记录NODE是 左起 第几列,还要知道最左边是第几列。 一开始最左边是第0列,ROOT是坐起第0列。 进入方程之后,如果这一列不存在,列数 =size(),手动添加。其实相当于往右添加列 然后看左边是否有left c
阅读全文
摘要:因为要多次查询,每次都遍历肯定不行,所以要保存信息。 最直接的就是保存每个string出现的位置,查询A,B的时候就直接比较他们所有的出现INDEX中最小的情况。 有一点需要注意的是,A出现的位置和B出现的位置都是按顺序添加的,从小到大。 假设M是A出现的一个位置,N是B出现的一个位置,我们首先更新
阅读全文
摘要:以最左边为开始,往右遍历,不一样的个数大于K的时候停止,回到第一个不一样的地方,以它为开始,继续。。 用QUEUE记录每次不一样的INDEX,以便下一个遍历开始, 从左往右,从右往左各来一次。。加上各种剪枝情况,比如未遍历的数量当前最大值res 的情况下,我们才看是否满足 others most +
阅读全文
摘要:这个题做得突出一个蠢字。。 思路就是看unique letter,因为题里说肯定是valid string。。 一开始有几个Z就有几个ZERO 同样的还有x for six, g for eight, w for two.. 比如有x个six,那剩下的i的字母数量要 x,s =x... 算完0682
阅读全文
摘要:似乎可以沿着对角线往右往下检查,也可以正常按题设检查。 我用的后者。。 二刷。 尝试了对角线,居然卡了…… 老老实实正常做了。 逐渐在适应 GOOGLE JAVA DOC STYLE的排版。 java public class Solution { public boolean validWordS
阅读全文
摘要:真心不会,想了很久,看提示是Array,仍然没有头绪,最后看的别人的做法。 可以用directed graph的思路来考虑。 要求的celebrity要满足2个条件: 1所有人都认识他 2他不认识任何人 另外一个很重要的条件是,只存在一个celebrity,其实一开始做不出来就是这个条件没有利用好。
阅读全文
摘要:算船的,横着的X或者竖着的X算一条船,然后不会出现 x x x 这种情况,X只能水平延伸或者纵向延伸…… 用一个ARRAY记录上一行情况: 是X的话就说明当前这行的该位置肯定不是X。 不是X的话,如果当前是X,再看他左边是不是边界或者.,其中之一说明发现了一条船,否则只是上一条船的一部分。。 然后根
阅读全文

浙公网安备 33010602011771号