【发布时间】:2021-03-04 01:06:11
【问题描述】:
问题:
一家公司正在向其员工分发电话号码,以使事情变得更容易。下一个数字不能等于最后一个数字是唯一的规则,例如 0223 是不允许的,而 2023 是允许的。每次至少排除三位数字。编写一个函数,接收电话号码的长度和将被排除的数字。该函数应打印所有可能的电话号码。
我在一次采访中得到了这个问题,我以前在大学里也看到过这样的问题。这是一个排列问题。我的问题是在没有一百万个 for 循环的情况下解决这个问题的最佳方法或体面方法是什么。
我确实明白这在技术上是这样工作的
电话号码长度 = 3;
[0-9],[0-9]不包括最后一位,[0-9]不包括最后一位
但我不确定如何将其转换为代码的最佳方式。接受任何语言!
谢谢:
另外,我可能在错误的地方问这个问题。如果我是,请告诉我。
【问题讨论】:
-
也许你可以写一个递归过程?你学会这个技巧了吗?
-
我在面试中尝试了递归函数,但是我的大脑失败了。
-
啊,对不起。但是,一种无需递归即可做到这一点的方法可能只涉及遍历从 0 到 10^(位数)- 1 的所有整数,并测试每个数字。例如,当电话号码的长度为 3 时,您可以从 0 迭代到 999,并注意每个号码如何对应一个唯一的 3 位电话号码序列(并且每个电话号码序列对应于其中一个 3 位数)。然后,只需测试每个单独的数字。
-
我也是这样做的。我创建了一个变量来保存值 10^lengthOfNum 并且我做了 while(i
-
在这种情况下,这种方法有什么问题吗?你有什么具体问题吗?
标签: c++ permutation