这是一个面试问题,似乎与 Project Euler Problem 14有关
Collatz 猜想说,如果你做以下事情
If n is even, replace n by n/2.
If n is odd, replace n by 3n+1.
你最终得到 1。
例如,5 -> 16 -> 8 -> 4 -> 2 -> 1
假设猜想为真,每个数字都有一个链长:达到 1 所需的步数。(1 的链长为 0)。
现在,问题是给定自然数 n、m 和一个自然数 k,给出一个算法来找到 1 到 n 之间的所有数字,使得这些数字的链长 <= k。还有一个限制是任何这些数字的链只能包含 1 到 m 之间的数字(即你不能超过 m)。
一个简单的方法是暴力破解它,并将其与记忆结合起来。
面试官说有一个O(S)时间算法,其中S是我们需要输出的数字个数。
有谁知道它可能是什么?