Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在小于O(n)的时间复杂度下找到n个阿姆斯特朗数?_Algorithm - Fatal编程技术网

Algorithm 如何在小于O(n)的时间复杂度下找到n个阿姆斯特朗数?

Algorithm 如何在小于O(n)的时间复杂度下找到n个阿姆斯特朗数?,algorithm,Algorithm,阿姆斯特朗数字系列为1,2,3,4,5,6,7,8,9153。。。。。。 如果可能的话,我们如何在小于O(n)的时间复杂度内找到n个阿姆斯特朗数 我尝试了这个解决方案,从1到max_int遍历,检查第I个数字是否为armstrong。如果是,计算它并添加到列表中。 然后返回第n个阿姆斯特朗号码的列表[n-1]。无需检查所有排列。如果您尝试[1,2,3,4],则检查结果数字排序时的结果数是否等于1234。例如[3,2,1,4],不需要检查任何其他置换。这降低了因子n的复杂性!其中n是位数。例如,以

阿姆斯特朗数字系列为1,2,3,4,5,6,7,8,9153。。。。。。 如果可能的话,我们如何在小于O(n)的时间复杂度内找到n个阿姆斯特朗数

我尝试了这个解决方案,从1到max_int遍历,检查第I个数字是否为armstrong。如果是,计算它并添加到列表中。
然后返回第n个阿姆斯特朗号码的列表[n-1]。无需检查所有排列。如果您尝试[1,2,3,4],则检查结果数字排序时的结果数是否等于1234。例如[3,2,1,4],不需要检查任何其他置换。这降低了因子n的复杂性!其中n是位数。例如,以这种方式检查所有9位数字需要大约28e3次检查,而不是1e9。

这可能不是最佳解决方案,但 根据文章,

正如D。 1985年冬季,经D.Hoey验证

所以,您可以将这些数字添加到列表中,并使用它返回第n个阿姆斯特朗数字。这样返回第n个数字只需要O(1)个时间

它可以避免遍历所有的数字,并检查它是否是阿姆斯特朗号码

此外,根据您使用的编程语言,您可能不需要全部88个数字,因为有些数字太长(39位),并且可能不受许多语言的支持