algorithm - 查找数字的任何排列是否在一个范围内

标签 algorithm permutation

我需要查找指定范围内是否存在数字的任何排列,我只需要返回是或否。

例如:Number = 122Range = [200, 250]。答案是,因为范围内存在 221。

附言:

  1. 对于我手头的问题,要搜索的号码 只会有两个不同的数字(它只会包含 1 和 2, 例如:1112221121)。
  2. 这不是一道作业题。这是在采访中被问到的。
  3. 我建议的方法是找到给定数字的所有排列并检查。或者遍历范围并检查我们是否找到数字的任何排列。

最佳答案

检查每个排列太昂贵且没有必要。

首先,您需要将它们视为字符串,而不是数字,

将每个数字位置视为一个单独的变量。

考虑每个变量可以容纳的可能数字集如何受范围限制。每个数字/变量对要么 (a) 始终有效 (b) 始终无效;或 (c) 其有效性有条件地取决于特定的其他变量。

现在将这些依赖性和独立性建模为图形。由于情况 (c) 很少见,因此很容易在与 O(10N) = O(N) 成正比的时间内搜索

关于algorithm - 查找数字的任何排列是否在一个范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10869167/

相关文章:

c++ - 一种在一维数组(位图)内迭代矩形区域的算法

algorithm - 检查数组 B 是否是 A 的排列

PHP计算二维数组的每个排列

python - 使用迭代器从 [1, 2, 3] 中获取特定的列表序列

python - 生成带有约束的大量(可能 30)的排列

algorithm - 生成带有熵参数的伪随机流

c++ - 使用三数比较器排序

c++ - 在c++中使用合并排序算法实现计数反转

algorithm - 如何在DP表中实现这个递归算法?

scala - 这个排列函数是如何工作的(Scala)?