412. Fizz Buzz and 463. Island Perimeter

主要写写这两个问题在Solutions里的one line python的解法,题目本身都很容易。

  1. Fizz Buzz
def fizzBuzz(self, n):
    return ['Fizz' * (not i % 3) + 'Buzz' * (not i % 5) or str(i) for i in range(1, n+1)]

这个问题有两个特别的语法点,一个是or除了逻辑运算符的功能外,还有一个语义是返回第一个非空对象,第二个是字符串也可以用乘法(以前只知道加法。。。)

  1. Island Perimeter
def islandPerimeter(self, grid):
    return sum(sum(map(operator.ne, [0] + row, row + [0]))
               for row in grid + map(list, zip(*grid)))

这个onelinepython着实让我想了一阵子。。。。前一个不明白的点就是map(operator.ne, [0] + row, row + [0]),后来通过各种实验和打印数据,发现这句话就是让每个grid中的row去和自己的后一位(或者理解成前一位也没问题)去做异或,然后第一位和最后一位和0做异或,之后sum起来,就是边的长度了。

再有一个点是for row in grid + map(list, zip(grid),后面的map(list, zip(grid)我在查了zip的用法之后发现,这里就是把整个grid翻转map之后返回的就是个完全转秩的grid,然后这里for循环的row其实就是col了(当然前面的那个in grid中取得还是row)。

真的是,很简洁的写法,但是工程中(工作的时候)我是绝对不会这么写的,虽然看起来很cooooooool!但是少写10几行代码的代价就是后人理解起来要花费10倍的时间。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,779评论 0 33
  • 从泰国回来已经快3个月了,这三个月里我好像一直处于一种奔波操心的状态。刚回到学校时忙着办手续、找宿舍,手续杂七杂八...
    小雨转晴阅读 241评论 0 1
  • 3 然后我赶紧把煎饼收起来我心里想我去为什么是我但是我心里还是很开心的因为是和王俊凯然后...
    王俊熙阅读 435评论 0 0
  • 文/木杨夏子 烨烨星空 闪闪星辰 遥望北极星空,那里有我的一个梦。 那一年,我的青春正好。感激岁月,感怀让我遇到的...
    木杨夏子阅读 112评论 0 2
  • 腊月二十七,我居然一整天呆在房间,没有下楼,也没有吃饭。 晚上感觉肚子好饿,下楼洗澡,才发现爸爸还在弄柑果,没有睡...
    小珍君阅读 176评论 0 1