[Project Euler] 来做欧拉项目练习题吧: 题目015
[Project Euler] 来做欧拉项目练习题吧: 题目015
周银辉
问题描述
Starting in the top left corner of a 22 grid, there are 6 routes (without backtracking) to the bottom right corner.

How many routes are there through a 2020 grid?
问题分析
这个题需要一点点观察能力:
观察2*2的方格,以左上角为起点,右下角为终点,形成的所有路径刚好可以构成一棵二叉树。
(不走回头路,并且以经过的方格上的节点为树节点,其中方格左上角为根节点,叶子节点始终是方格右下角)。
而路径条数也就是树的叶子节点个数。
用Count[A]表示树A的叶子节点个数,Left,Right表示左右子树.那么Count[A] = Count[Left] + Count[Right]
OK,问题就变得很简单了,一个递归算法就可以解决。
此后的问题,就是优化递归算法(创建一个缓冲区),减少重复运算,否则速度是不可接受的。
速度挺快的:
real 0m0.004s
user 0m0.001s
sys 0m0.003s