数学中有一个重要概念,就是抽象。由数学开始发展的计算机科学,自然也离不开抽象。计算机语言、编程范式都为抽象提供了工具,函数、回调、泛型、算子、类……
以下从两个问题开始,描述了一大类抽象。...而我们今天要讲的就是如何把这两个问题抽化从而提取共性,从更一般的角度上去解决这两个问题乃至更多的问题。
一般来说,这样的题目会出现在孩子的奥数甚至脑筋急转弯里。...然而,我从来不认为一把钥匙开一把锁从而满是套路的教育有什么真正的用处。
状态和原子
所谓抽象,就是从各个问题中去掉不重要的成分,只保留与问题解答相关的最少信息,然后再从多个问题中提取共性。...既然栈记录的是路径,而我们的目的是路径,那么我们至少不需要和广度遍历那样,对于每个顶点都再记录完整路径,因为从栈底到这个顶点就是路径。...我们把9个位置的数字(如果是空则为0)序列当成状态,比如上面的状态为(0,8,7,6,5,4,3,2,1),下面的状态为(1,2,3,4,5,6,7,8,0)。