排列称为平方链当且仅当连续的数之和始终为完全平方数。例如,
8 1 15 10 6 3 13 12 4 5 11 14 2 7 9 16
是数字1到16的平方链排列。我想编写一个程序,找到数字1到n的平方链排列,其中n的取值范围为1到100。
最简单的方法是按字典顺序遍历所有n个数字的排列(我知道如何编写这个算法),并检查平方链条件,但对于较大的n,这将花费很长时间。
比较好的方法是逐个选择排列中的数字,并检查刚选择的数字加上前一个数字是否为完全平方数,希望能够完成整个排列。但是这样会经常回溯,效率可能不高。
有更好的方法吗?此问题是否为众所周知的问题?感谢您的帮助。