ARTS 第三周 6.8-6.14

用户头像
我笔盒呢
关注
发布于: 2020 年 06 月 14 日

Algorithm

仍在继续学习数据结构与算法中,个人觉得递归很有趣很神奇,此处将一道典型的递归题展示出来,

力扣22https://leetcode-cn.com/problems/generate-parentheses/



此题让我们列出所有合法的、不同组合的n对括号排列。

我一开始的思路是将n考虑成1和n-1两部分,这样就有三种组合:(n-1)、()n-1、n-1(),调试之后发现了这个思路的一个逻辑问题:只考虑了一种拆分情况,考虑不全,比如n=4时有(())(())这种情况,就无法被发现。

最后还是看了大佬们的答案,发现如下这种非常简便的解法,递归时考虑合法性,算是暴力法的一个优化。

其实还有一行两行的解法,不过相应的可读性会有所下降。

总之,递归的题目很有意思,并且大佬们的答案总是出奇的简洁,不禁让人膜拜。



class Solution:
def generateParenthesis(self, n: int) -> List[str]:
def generate(left, right, curr, res=[]):
if left: generate(left-1, right, curr + '(')
if left < right:generate(left, right-1, curr + ')')
if not right: res += curr,
return res
return generate(n, n, '')



Review

Why python is not the programming language of the future?



这篇文章分析了Python语言的特点及劣势,最后介绍了go、rust、julia几个弥补其劣势的新语言。Python向来以小巧、全面、易上手、高度发达的社区而闻名,但由于其设计原则所限,缺点也是显而易见的:

1)速度。由于Python需要保证每个变量只有一个数据类型,所以无法进行可能使其混乱的并行操作。这让Python花费的时间会比其他主流语言多数倍。

2)范围。Python是动态范围界定的,每个表达式需要在每个可能的上下文中进行测试,这使得Python执行变得繁琐。

3)空格。Python以空格和制表符分隔代码,这在大型工业级代码面前是不易维护的。

4)移动开发。Python在移动开发时较为困难。

……



虽然Python有很多缺陷,但由于其鲜明的特点与优势,仍然在蓬勃发展中;新兴的编程语言取代Python,还是一个较为长期的过程,我们可以持续关注。

Tips

在刷算法题的时候,发现了Python中逗号的一个小特点,觉得很有意思,可以在以后的coding中应用。



在一个字符串p后若加上逗号,则会以整体输出。

p = "(((())))"
res = []
res += p
print(res)
res = []
res += p,
print(res)
# ['(', '(', '(', '(', ')', ')', ')', ')']
# ['(((())))']



Share

100 | 高效学习:面对枯燥和量大的知识

这是耗子叔的文章,简洁清晰。表述了如何让学习知识的过程变得有趣、有效,并分享了一些技巧与原则。



有趣=熟悉+意外,若你觉得某事枯燥无聊,则有三种情况:熟悉但不意外,意外但不熟悉,陌生且不意外。在学习知识这一块,第一种情况属于碾压式学习,天天学1+1,任谁也不会觉得有趣;让小学生学非欧几何,虽然三角形内角和不是180让他意外,但仍感到非常陌生,就是第二种情况了;第三种情况类似于降维打击,就像我虽然不知道算命是怎么算的,但它肯定没什么用,没有任何意外可言。



所以,若想有趣地学习,既需要对所学内容有所熟悉,又需要一定程度的意外。这需要我们有很强的目标感,过程中如果有一些即时反馈就更好了。但我仍想说,无聊不可避免,与其一味地避免无聊,不如先接受它,与它和解。



学习是件反人类的事,我们需要刻意改变大脑思考习惯、奖惩机制,需要养成很多微习惯,这是一个与基因抗争的过程,是值得一直继续的征程,愿我们都有所收获。

用户头像

我笔盒呢

关注

还未添加个人签名 2019.01.07 加入

还未添加个人简介

评论

发布
暂无评论
ARTS第三周6.8-6.14