6.22 - easy总结5

326. Power of Three: 数学题一直不是很容易想出来,这题有两种解法,一是用log(n, 3),另一种是找到int中3的最大power的值,比如说3**18是最大值,然后拿3**18%n看看有没有余,总体来说这道题就是一道数学题,没有太多意义。
339. Nested List Weight Sum:BFS记录当前层的深度就好了
342. Power of Four: 这题完全可以用power of three的解法来做。不过因为是4又有一个特殊的解法:num != 0 and num & (num - 1) == 0 and (num - 1) % 3 == 0 最后一个条件是把2**n分为2*(2k)和2*(2k+1)两种情况,然后证明一下就可以了。觉得这题没啥意义,更多的数学知识,而不是程序知识。
344. Reverse String: 先变成list,reverse然后再join
345. Reverse Vowels of a String: two pointer,碰到vowel就swap一下
346. Moving Average from Data Stream: 用一个deque,一边进一边出
349. Intersection of Two Arrays: sort一个,然后把另一个里的每一个值作为target进行二分查找
350. Intersection of Two Arrays II:因为有重复项,不太容易用二分查找,所以直接用hashtable
359. Logger Rate Limiter: 维护一个hashtable,从msg到timestamp
367. Valid Perfect Square: 其实就是求sqrt,用二分查找
371. Sum of Two Integers: 这题又是bit manipulation,最不擅长的两种题,一个是math,一个是bit manipulation,特别不顺手。这题不准用加减法,那只能用靠xor或者移位了。(a xor b) & b'11111111' 就是不相同的bit相加的值 ((a & b)<<1)&b'11111111' 就是当前carry的值,然后再将这两个值赋值为a, b重复计算直到b为0
374. Guess Number Higher or Lower: 二分查找的应用吧。
383. Ransom Note: 读起来绕口的不行, 其实就是一个hashtable
387. First Unique Character in a String: 又是一个hashtable,万能的hashtable
389. Find the Difference: 和在所有数里找单独出现的数一样,把所有char xor,然后剩下的就是了
400. Nth Digit: 这题又是个数学题,单位数有9个,双位数有90个,三位数有900个,先判断落在哪一位数里,然后返回int(str(first + n/digits)[n%digits]),first是这个位数第一个值也就是 1000这种, n/digits就表示从1000开始算第345个值,因为每一个1000开始的数字都有四位,所以要345/4表示出到底是第几个数,然后n%digits看看剩余了几位,就从当前数里选出来就好了
401. Binary Watch: 先用backtracking算出所有可能的permutation,然后针对每个permutation前四位是小时,后六位是分钟。
404. Sum of Left Leaves: 主要是要鉴别出哪个是left leave,所以就要用到上一层的信息.
405. Convert a Number to Hexadecimal: 先&15获得后四位,然后移位 >> 4
408. Valid Word Abbreviation: 这题写起来还有点麻烦,但是总体的思路就是要把abbreviation里的数字和字幕分离开然后依次做比较就可以了。

你可能感兴趣的:(6.22 - easy总结5)