在图中找规律,n等分将产生n层结构。将划分后的最短三角形边长记为1.
如图中,4等分后产生了4层结构。
在任意一层中,长度为1的三角形数可以分成两部分:
边落在第n层的正三角数 + 唯一顶点落在第n层的倒三角数。
而倒三角数可以视为来自上一层正三角的倒影。
再进一步观察三角形数:边落在第n层且长为m的正三角数为n-m+1
在第n层。长为m的倒三角形,它只能来自第n-m层的正三角形。
那么独属于第n层的长为m的三角形数为(n-m+1) + (n-m -m + 1) (后者公式中必须要求n-m>=m,不然结果为负)
那么依据这个思路,实现了函数f1, 有max函数来保证倒三角数不产生负的结果,耗时18ms左右。
进一步优化,将每层的结果用数组保存下来,避免重复计算,得到了f2函数,耗时13ms左右。
由于倒三角数存在的前提是n-m>=m,故m<=2/n,当m>2/n时不需要计算。为了将内循环划分为两部分分别计算,得到了f3函数,耗时降低到11ms.
最后,依据f3中内循环思路,将代码转换为数学公式,其实就是两个不同范围的数列和,化简过程见f3函数注释。最终,发现第n层独立产生的三角形数为(3n*n+2n)/4。由此也就产生了最后的递推形式代码f4函数。耗时1ms。
这样应该比较清晰展示了一步一步发现规律,总结规律,优化代码,提炼公式的过程。
最后,附上提交记录,从最开始的21ms到最后1ms。
大家写完代码最好尝试进一步优化代码,降低耗时,这能训练思维。